La manipulación de datos (INSERT, UPDATE) usando conjunto de datos de objetos con VB.NET

StackOverflow https://stackoverflow.com/questions/1692402

  •  18-09-2019
  •  | 
  •  

Pregunta

Soy novato en el uso conjunto de datos. Estoy escribiendo un programa con VB.NET, no tengo que seleccionar datos de una tabla. Entonces tengo que actualizar aproximadamente 4 tablas e insertar a 2 tablas. ¿Qué enfoque estará bien para mí? Estoy pensando en usar conjunto de datos. Si alguien puede señalar que un problema, por favor, muéstrame con Código de ejemplo para actualizar conjunto de datos. que gracias a todos mucho.

¿Fue útil?

Solución

Este es un enlace puede hacer referencia a:

Public Function CreateCommandAndUpdate( _
    ByVal connectionString As String, _
    ByVal queryString As String) As DataSet

    Dim dataSet As DataSet = New DataSet

    Using connection As New OleDbConnection(connectionString)
        connection.Open()
        Dim adapter As New OleDbDataAdapter()

        adapter.SelectCommand = New OleDbCommand( _
            queryString, connection)

        Dim builder As OleDbCommandBuilder = _
            New OleDbCommandBuilder(adapter)

        adapter.Fill(dataSet)

        ' Code to modify the data in the DataSet here. 

        ' Without the OleDbCommandBuilder this line would fail.
        builder.GetUpdateCommand()
        adapter.Update(dataSet)
    End Using
    Return dataSet
End Function

Y aquí está un ejemplo sobre cómo eliminar:

Private Sub btnDeleteUser_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDeleteUser.Click
Dim reponse_del As Integer
If txtSearch.Text = "" Then
MessageBox.Show("Please type a user name into the text box")
End If

'clear and refill Dataset
OleDAPass.SelectCommand.Parameters("UserName").Value = txtSearch.Text
DS_Pass1.Clear()
OleDAPass.Fill(DS_Pass1)
'no records of the search name
If DS_Pass1.Tables("PwordStore").Rows.Count = 0 Then
MessageBox.Show("Record not found")
ElseIf DS_Pass1.Tables("PwordStore").Rows.Count = 1 Then 'record exists delete it
MessageBox.Show("Are you sure you wish to delete this user?", "Warning", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation)
If reponse_del = DialogResult.Yes Then
OleDAPass.SelectCommand.Parameters ("UserName").Value = txtSearch.Text
'delete row
DS_Pass1.Tables("PwordStore").Rows(0).Delete()
OleDAPass.Update(DS_Pass1, "PwordStore")
End If
DS_Pass1.PwordStore.AcceptChanges()
DS_Pass1.Clear()
txtSearch.Text = ""
End If
End Sub

Otros consejos

Debe trabajar con adaptador de datos - la mejor manera de aprender - buscar algunos ejemplos en MSDN o Google, entonces - intenta resolver su problema - entonces - si se encuentra con un problema - publicar aquí.

en lo básico: se necesita una conexión, un comando, un adaptador de datos y un conjunto de datos.

se utiliza datadapter relleno para obtener los datos de la base de datos para el conjunto de datos, y la actualización de los datos para poner de nuevo a la base de datos. Usted necesita decir el adaptador de datos cómo hacerlo, o utilizar un asistente para generar automáticamente los comandos (INSERT, UPDATE etc ...)

  Public Function MaintanenceImport(ByVal con As IDbConnection, ByVal TransDate As Date, ByVal ds2 As DataSet)
        Try
            For index1 = 0 To ds2.Tables.Count - 1
                tblname = ds2.Tables(index1).TableName
                ds1 = Util.GetDataSet4Query(" select * from " & tblname & " ")
                index = 0
                ds1.Tables(index).TableName = "" & tblname & ""
                'For index = 0 To ds1.Tables.Count - 1
                str1 = ""
                Str = ""
                cnt1 = 0
                '    '====Comparing the Xml TableName and the Database Table Name
                '    '==== ds1-from Database;ds2-from xml
                '    If (ds1.Tables(index).TableName = ds2.Tables(index1).TableName) Then
                '        tblname = ds2.Tables(index1).TableName
                l = 0
                '=== Counting the Columns of xml dataset
                While (l <= ds2.Tables(index1).Columns.Count - 1)
                    n = 0
                    '=== Counting the Columns of DataBase dataset
                    While (n <= ds1.Tables(index).Columns.Count - 1)
                        '==== Comparing the Column Names and seperating the matching and unmatching fields
                        If ((UCase(ds2.Tables(index1).Columns(l).ColumnName).Trim) = (UCase(ds1.Tables(index).Columns(n).ColumnName).Trim) = True) Then
                            f2 = True
                            Exit While
                        Else
                            f2 = False
                        End If
                        n += 1
                    End While
                    '=== Collecting the Unmatched Column Names
                    If f2 = False Then
                        cnt3 = cnt3 + 1
                        If cnt3 = 1 Then
                            str4 = ds2.Tables(index1).Columns(l).ColumnName
                            col1 = str4
                            m1 = 0
                            a1(m1) = 1
                        Else
                            str4 = str4 + "," + ds2.Tables(index1).Columns(l).ColumnName
                            m1 += 1
                            a1(m1) = l
                        End If
                    End If
                    '=== Collecting the matching column names
                    If f2 = True Then
                        cnt1 = cnt1 + 1
                        If cnt1 = 1 Then
                            str1 = ds2.Tables(index1).Columns(l).ColumnName
                            col = str1
                            m = 0
                            a(m) = l
                        Else
                            str1 = str1 + "," + ds2.Tables(index1).Columns(l).ColumnName
                            m += 1
                            a(m) = l
                        End If

                    End If
                    l += 1
                End While

                '=================================================================
                '===>     code to fetch value from xml for insert            <====
                '=================================================================
                i = 0
                '==== Take a row count of dataset from xml
                While (i <= ds2.Tables(index1).Rows.Count - 1)
                    k = 0
                    f1 = False
                    '==== Take a row count of dataset from Database
                    While (k <= ds1.Tables(index).Rows.Count - 1)
                        '=== Comparing the First Field of the row 
                        If (ds2.Tables(index1).Rows(i)(0).ToString() = ds1.Tables(index).Rows(k)(0).ToString()) Then
                            '== if matches true Else false
                            f1 = True
                            Exit While
                        Else
                            f1 = False
                        End If
                        k += 1
                    End While
                    '== if false it indicates NewRecord
                    If f1 = False Then
                        m = 0
                        '=================================================================
                        '===>if column names collected are similar to the dbase table<====
                        '=================================================================

                        If a Is Nothing Then
                            cnt = 0
                            cnt = cnt + 1
                            j = 0
                            While (j < ds2.Tables(index1).Columns.Count)
                                If cnt = 1 Then
                                    Str = ds2.Tables(index1).Rows(i)(j).ToString()
                                    q = str
                                Else
                                    str = str + "," + "'" + Replace(ds2.Tables(index1).Rows(i)(j).ToString(), "'", "''") + "'"
                                    cnt += 1
                                End If
                                j += 1
                            End While
                            '========================================================================
                            '===>if column names collected are not similar to the database table<====
                            '========================================================================
                            '=== Collecting the values 
                        Else
                            m = 0
                            cnt = 0
                            cnt += 1
                            cnt2 = cnt1
                            For m = 0 To cnt2 - 1
                                p = a(m)
                                If p.ToString Is Nothing Then
                                    Exit For
                                Else
                                    If cnt = 1 Then
                                        str = "'" + ds2.Tables(index1).Rows(i)(p).ToString() + "'"
                                        'q = str
                                    Else
                                        str = str + "," + "'" + Replace(ds2.Tables(index1).Rows(i)(p).ToString(), "'", "''") + "'"
                                    End If
                                    cnt += 1
                                End If
                            Next
                        End If
                        Dim TransCon As IDbConnection
                        Dim Trans As IDbTransaction
                        Try
                            '== Inserting the collected values into table
                            TransCon = Util.GetConnection
                            TransCon.Open()
                            Trans = TransCon.BeginTransaction(IsolationLevel.ReadCommitted)
                            sql3 = "insert into " & tblname & "(" & str1 & ") values(" & str & ")"
                            '== Check Identity Column
                            If Util.ExecuteQryNSP(TransCon, CmdType.Text, ExecuteMode.ExecuteScalar, Trans, "select count(*) from SysColumns where Id=object_id('" & tblname & "') and Colstat&1=1") > 0 Then
                                Util.ExecuteQryNSP(TransCon, CmdType.Text, ExecuteMode.ExecuteNonQuery, Trans, "set IDENTITY_INSERT " & tblname & " on ")
                                Util.ExecuteQryNSP(TransCon, CmdType.Text, ExecuteMode.ExecuteNonQuery, Trans, sql3)
                                Util.ExecuteQryNSP(TransCon, CmdType.Text, ExecuteMode.ExecuteNonQuery, Trans, "set IDENTITY_INSERT " & tblname & " off ")
                            Else
                                Util.ExecuteQryNSP(TransCon, CmdType.Text, ExecuteMode.ExecuteNonQuery, Trans, sql3)
                            End If
                            Trans.Commit()
                        Catch ex As Exception
                            Trans.Rollback()
                        End Try
                        '=== Updating the Records from Xml to DataBase
                    Else
                        Try

                            Dim da1 As New SqlDataAdapter
                            Dim builder As New SqlCommandBuilder(da1)
                            da1.SelectCommand = New SqlCommand("select * from " & tblname & "", con)
                            '== Collecting the column names in a string array
                            Dim str2() As String = str1.Split(",")
                            '=== Filling the Xml DataSet into the DataTable
                            Dim dt1 As DataTable = ds2.Tables(index1)
                            '=== Filling the DataBase dataset into the datatable
                            Dim dt2 As DataTable = ds1.Tables(index)
                            Dim drcpu As DataRow
                            Dim drVendor As DataRow
                            '=== By Comparing row by row and field by field Updating done
                            For Each drcpu In dt1.Rows
                                For Each drVendor In dt2.Rows
                                    If drVendor(str2(0)) = drcpu(str2(0)) Then
                                        For Each Me.str3 In str2
                                            If Not IsDBNull(drcpu(str3)) Then
                                                If drVendor(str3).ToString = drcpu(str3).ToString Then
                                                    Continue For
                                                Else
                                                    If IsDBNull(drVendor(str3)) Then
                                                        drVendor.BeginEdit()
                                                        drVendor(str3) = drcpu(str3).ToString
                                                        drVendor.EndEdit()
                                                        da1.UpdateCommand = New SqlCommand("update " & tblname & " set " & str3 & "='" & Trim(drVendor(str3)) & "'  where " & str2(0) & "= " & drVendor(str2(0)) & "")
                                                        da1.Update(ds1, "" & tblname & "")
                                                    End If
                                                    Dim Store2 As String
                                                        Dim Store1 As String
                                                        Store2 = (UCase(CType(drVendor(str3), String)).Trim)
                                                        Store1 = (UCase(CType(drcpu(str3), String)).Trim)
                                                        If (Store2).Equals(Store1) Then
                                                            Continue For
                                                        Else
                                                            drVendor.BeginEdit()
                                                            drVendor(str3) = drcpu(str3).ToString
                                                            drVendor.EndEdit()
                                                            Dim SqlStr As String = ""
                                                            If tblname = "MasterSettings" Then
                                                                SqlStr = "update " & tblname & " set " & str3 & "='" & Replace(Trim(drVendor(str3)), "'", "''") & "'  where " & str2(0) & "= " & drVendor(str2(0)) & " and " & str2(1) & "= " & drVendor(str2(1)) & ""
                                                            Else
                                                                SqlStr = "update " & tblname & " set " & str3 & "='" & Replace(Trim(drVendor(str3)), "'", "''") & "'  where " & str2(0) & "= " & drVendor(str2(0)) & ""
                                                            End If
                                                            da1.UpdateCommand = New SqlCommand(SqlStr)
                                                            da1.Update(ds1, "" & tblname & "")
                                                        End If
                                                    End If
                                                    'End If
                                                End If
                                        Next

                                    End If
                                Next
                            Next
                        Catch ex As Exception
                            MsgBox(ex)
                        End Try
                    End If
                    i += 1
                End While
            Next
            Return True
        Catch ex As Exception
            Return False
        End Try
    End Function
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top