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