使用带有VB.NET的DataSet对象的数据操作(INSERT,UPDATE)

时间:2009-11-07 08:13:50

标签: vb.net dataset insert-update

我是使用DataSet的新手。我正在用VB.NET编写程序,我必须从一个表中选择数据。然后我必须更新大约4个表并插入2个表。哪种方法对我来说没问题?我正在考虑使用DataSet。如果有人可以指出这个问题,请告诉我示例代码来更新DataSet。非常感谢你们。

3 个答案:

答案 0 :(得分:1)

这是a link您可以参考:

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

这里有关于如何删除的an example

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

答案 1 :(得分:0)

您应该使用数据适配器 - 最好的学习方法 - 在MSDN或Google中查找一些示例,然后 - 尝试解决您的问题 - 然后 - 如果您遇到问题 - 请在此处发布。

基础知识: 你需要一个连接,一个命令,一个数据适配器和一个数据集。

使用datadapter fill将数据从DB获取到数据集, 并更新以将数据放回数据库。 你需要告诉数据适配器如何做到这一点,或使用向导自动生成命令(INSERT,UPDATE等...)

答案 2 :(得分:0)

  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