我是使用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