我是使用DataSet的新手。我正在用VB.NET編寫一個程序,我必須從一個表中選擇數據。然後,我必須更新大約4個表並插入2個表。哪種方法對我來說可以嗎?我正在考慮使用DataSet。如果任何人都可以指出這個問題,請向我展示示例代碼以更新DataSet。非常感謝你。使用VB.NET中的DataSet對象進行數據操作(INSERT,UPDATE)
回答
這是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
你應該用數據適配器工作 - 學習最好的方法 - 找一些例子在MSDN或谷歌它,然後 - 嘗試解決你的問題 - 然後 - 如果你遇到問題 - 在這裏發佈。
基本知識: 您需要連接,命令,數據適配器和數據集。
您使用datadapter填充從數據庫中的數據得到的數據集, 和更新把數據備份到數據庫中。 你需要告訴數據適配器如何做到這一點,或使用嚮導來自動生成命令(INSERT,UPDATE等...)
謝謝你的回答解決了我的問題的一部分,我越來越知道我必須使用dataadapter。謝謝Dani!我的問題是我必須從一個表中檢索數據。根據這些數據,我必須更新並插入其他表格(大約5張表格)。所以我必須根據檢索到的數據進行循環,以插入和更新其他表。在那個問題上,我可以使用dataadapter嗎?它的表現如何? – RedsDevils 2009-11-07 08:38:13
您可以使用數據適配器或多個數據適配器,具體取決於您必須執行的更改類型。 我通常使用存儲過程處理數據更改(如果它們比較複雜),並將數據重新加載回數據集。 – Dani 2009-11-07 14:24:54
感謝您的想法丹妮!現在我正在努力開發我的程序。 :) 非常感謝! – RedsDevils 2009-11-07 18:20:49
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
- 1. 使用DataSet無緩存對數據庫執行操作
- 2. 使用SPARQLWrapper進行INSERT/DELETE/UPDATE查詢
- 3. 對richtextbox中的數據進行操作
- 4. 無法在使用VB.NET中的DataSet的GridView中進行排序
- 5. 使用DBNull或null INSERT/UPDATE數據?
- 6. INSERT對UPDATE
- 7. 如何在Visual Basic中操作gridview對象的數據? (VB.NET)
- 8. INSERT,UPDATE和DELETE屬於操作順序?
- 9. 使用python進行數據框操作
- 10. 使用Python/MySQLdb進行UPDATE操作的MySQL的轉義字符
- 11. 使用mysqli在同一查詢中進行SELECT和INSERT/UPDATE
- 12. 在相關操作使用INSERT和UPDATE語句
- 13. 如何使用SELECT DELETE INSERT UPDATE操作獲取表名稱
- 14. 在同一查詢中對dup進行INSERT INTO,SELECT和UPDATE
- 15. 使用VB.NET中的&或+進行字符串操作
- 16. 使用函數參數作爲Mongoose Update中的對象鍵值
- 17. 使用流api對列表數據進行多重操作
- 18. 使用Python對pyspark數據框進行移調操作
- 19. asp.net中的SELECT,INSERT,UPDATE和DELETE操作的泛型c#類
- 20. 如何在VB.NET中使用DataGridView對數據進行排序?
- 21. 如何使用存儲在數組列表中的對象進行操作?
- 22. 你會如何在vb.net中使用trimstart進行以下操作?
- 23. UPDATE和INSERT在Python中不起作用
- 24. 在SQL審計中捕獲數據庫級審計操作的行數(DELETE,INSERT,UPDATE)
- 25. 模型數據庫表的INSERT,UPDATE
- 26. 對多個lambdas中捕獲的對象進行操作
- 27. R - 根據條件對數據幀行進行操作
- 28. 功能不能對R中的數據集進行操作
- 29. JavaFX,對TableView中顯示的數據進行操作
- 30. 使用VB.net使用「自動過濾器」對Excel中的數據進行排序?
非常感謝恩古不久惠! – RedsDevils 2009-11-07 08:39:47
感謝你的例子。我的問題是我必須從一個表中檢索數據。根據這些數據,我必須更新並插入其他表格(大約5張表格)。所以我必須根據檢索到的數據進行循環,以插入和更新其他表。那麼它怎麼樣? – RedsDevils 2009-11-07 08:44:01