Insert Update Delete Datagridview über SQL Server gespeicherte Prozeduren?

Ich bin neu vb.net. Bitte Geduld mit mir. Ich würde gerne lernen, wie Sie einfügen, aktualisieren, löschen von Daten in einer Datagridview. Bisher habe ich gelernt, ist der beste Ansatz, um dieses zu binden, die DatagridView zu einem DataTable? Die Voraussetzung ist, um gespeicherte Prozeduren verwenden. Ich darf nicht direkt auf Datenbank-Tabellen.

Meine öffentlichen Variablen:

Public intDisbursementID As Long
Dim CS As String = ConfigurationManager.ConnectionStrings("SimpleAccounting.My.MySettings.SimpleAcctgConnectionString").ConnectionString
Dim cb As SqlCommandBuilder = Nothing
Dim da As SqlDataAdapter = Nothing
Dim ds As DataSet = Nothing
Dim dv As DataView
Dim dt As DataTable
Dim bs As BindingSource
Dim isDataLoaded As Boolean

Meinem code unten aus dem Laden:

Private Sub LoadDetailsData(ByVal mDisbursementID As Long)

    Using con As SqlConnection = New SqlConnection(CS)
        Try
            da = New SqlDataAdapter("sp_NET_tblDisbursementDetails_CompanyID_DisbursementID", CS)
            da.SelectCommand.CommandType = CommandType.StoredProcedure
            da.SelectCommand.Parameters.AddWithValue("@CompanyID", CInt(ConfigurationManager.AppSettings("CompanyID")))
            da.SelectCommand.Parameters.AddWithValue("@DisbursementID", CLng(mDisbursementID))

            cb = New SqlCommandBuilder(da)
            ''======== I have no idea how to make this work ===============
            'da.InsertCommand = SqlCommand.GetInsertCommand()
            'da.UpdateCommand = SqlCommand.GetUpdateCommand()
            'da.DeleteCommand = SqlCommand.GetDeleteCommand()
            '==============================================================

            dt = New DataTable
            bs = New BindingSource
            da.Fill(dt)
            bs.DataSource = dt
            dgvDisbursementDetails.DataSource = bs
            'dgvDisbursementDetails.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCellsExceptHeader)

        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Using

End Sub

Meine Schaltfläche speichern code:

da.Update(dt)

Frage: ich kann nicht herausfinden, einen Weg, wie man das SqlCommandBuilder zu arbeiten. Gibt es eine Möglichkeit für mich, zu überschreiben SqlCommandBuilder meinen vorhandenen einfügen, aktualisieren und löschen von gespeicherten Prozeduren?

Ich denke ich habe eine Lösung gefunden: (aber ich verstehe wirklich nicht, die Nebenwirkungen auf der Datenbank-Seite.) Da SQLCommandBuilder aus der insert -, update -, delete-Befehle für mich bedeutet es, ich muss nicht mehr meine bestehende einfügen, aktualisieren und löschen gespeicherte Prozeduren? Direct access-Tabelle ist nicht erlaubt, in meine Firma für die ich arbeite.

Unter meinem aktualisierten code:

Private Sub LoadDetailsData(ByVal mDisbursementID As Long)


    Using con As SqlConnection = New SqlConnection(CS)
        Try
            'con.Open()
            da = New SqlDataAdapter("sp_NET_tblDisbursementDetails_CompanyID_DisbursementID", CS)
            da.SelectCommand.CommandType = CommandType.StoredProcedure
            da.SelectCommand.Parameters.AddWithValue("@CompanyID", CInt(ConfigurationManager.AppSettings("CompanyID")))
            da.SelectCommand.Parameters.AddWithValue("@DisbursementID", CLng(mDisbursementID))

            ds = New DataSet
            da.Fill(ds)
            ds.Tables(0).TableName = "Disbursements"

            dgvDisbursementDetails.DataSource = ds.Tables("Disbursements")

        Catch ex As Exception
            Throw ex
            'MessageBox.Show(ex.Message)
        End Try
    End Using

End Sub

cmdSaveDetails_Click Code:

    cb = New SqlCommandBuilder(da)
    da.Update(ds, "Disbursements")

Ich bin versucht zu duplizieren des SQLCOMMANDBUILDER-durch meine eigene insert -, update -, delete-Befehle mit storedprocedures. Ich bin stecken mit diesem Fehler auf buttonSave_Click: sqladapter.Update(dtable) FEHLER: "parallelitätsverletzung: der UpdateCommand betroffen 0 der erwarteten 1 Datensätze"

Unter meinem aktualisierten code:

Globale Variablen:

Public intDisbursementID as  Long
Dim CS As String = ConfigurationManager.ConnectionStrings("SimpleAccounting.My.MySettings.SimpleAcctgConnectionString").ConnectionString
Dim sqladapter As SqlDataAdapter
Dim dset As DataSet
Dim dtable As DataTable

Form Load-Code:

LoadDisbursementDetails(intDisbursementID)
myownSqlCommandBuilder(intDisbursementID)

LoadDisbursementDetails Sub-Code:

Private Sub LoadDisbursementDetails(ByVal mDisbursementID As Long)

    Using con As SqlConnection = New SqlConnection(CS)

        Try
            sqladapter = New SqlDataAdapter("sproc_DisbursementDetailsSelectByDisbursementID", con)

                sqladapter.SelectCommand.CommandType = CommandType.StoredProcedure
                sqladapter.SelectCommand.Parameters.AddWithValue("@DisbursementID", CLng(mDisbursementID))

                dset = New DataSet
                dtable = New DataTable

                sqladapter.Fill(dset)
                sqladapter.Fill(dtable)

                dgvDisbursementDetails.DataSource = dtable


        Catch ex As Exception
            Throw ex
        End Try

    End Using

End Sub

myownSqlCommandBuilder Sub-Code:

Private Sub myownSqlCommandBuilderCode(ByVal mDisbursementID As Long)

    Using con As SqlConnection = New SqlConnection(CS)

        Dim delete As New SqlCommand("sproc_DisbursementDetailsDelete", con)
        delete.CommandType = CommandType.StoredProcedure
        delete.Parameters.Add("@DisbursementDetailsID", SqlDbType.BigInt, 8, "DisbursementDetailsID")

        Dim insert As New SqlCommand("sproc_DisbursementDetailsInsert", con)
        insert.CommandType = CommandType.StoredProcedure
        insert.Parameters.Add("@DisbursementID", SqlDbType.BigInt, 8, "DisbursementID")
        insert.Parameters.Add("@CompanyID", SqlDbType.BigInt, 8, "CompanyID")
        insert.Parameters.Add("@DatePosted", SqlDbType.DateTime, 8, "DatePostedID")
        insert.Parameters.Add("@SLID", SqlDbType.BigInt, 8, "SLID")
        insert.Parameters.Add("@Amount", SqlDbType.BigInt, 8, "Amount")
        insert.Parameters.Add("@UserID", SqlDbType.BigInt, 8, "UserID")

        Dim update As New SqlCommand("sproc_DisbursementDetailsUpdate", con)
        update.CommandType = CommandType.StoredProcedure
        update.Parameters.Add("@DisbursementID", SqlDbType.BigInt, 8, "DisbursementID")
        update.Parameters.Add("@CompanyID", SqlDbType.BigInt, 8, "CompanyID")
        update.Parameters.Add("@DatePosted", SqlDbType.DateTime, 8, "DatePostedID")
        update.Parameters.Add("@SLID", SqlDbType.BigInt, 8, "SLID")
        update.Parameters.Add("@Amount", SqlDbType.BigInt, 8, "Amount")
        update.Parameters.Add("@UserID", SqlDbType.BigInt, 8, "UserID")
        update.Parameters.Add("@DisbursementDetailsID", SqlDbType.BigInt, 8, "DisbursementDetailsID")


        '==== Error: object reference not set to an instance of an object ====
        sqladapter.DeleteCommand = delete
        sqladapter.InsertCommand = insert
        sqladapter.UpdateCommand = update
        '======================================================================

        sqladapter.MissingSchemaAction = MissingSchemaAction.AddWithKey

    End Using

End Sub

Taste Speichern-Code:

 sqladapter.Update(dtable)

Bitte helfen. Ich bin stecken. Danke.

  • habe es entfernt die using-Anweisung myownSqlCommandBuilderCode und überarbeitete mein update storedproc zu lösen, das concurrency-problem.
InformationsquelleAutor cool water | 2013-10-28
Schreibe einen Kommentar