我有一些示例代码
在这些代码中,我在查询中添加了一列(a.TUTAR+2(
但当我更改数据网格视图时,我无法更新访问mdb
注意:我可以组合多个表并添加更多列
Imports System.Data.OleDb
Public Class Form1
Dim myDA As OleDbDataAdapter
Dim myDataSet As DataSet
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
Dim con As OleDbConnection = New OleDbConnection("Provider=Microsoft.jet.oledb.4.0;data source=|DataDirectory|MYDB.mdb") ' Use relative path to database file
Dim cmd As OleDbCommand = New OleDbCommand("SELECT A.*,A.TUTAR+2 FROM CARTH001 A WHERE KAYITNO = 1", con)
con.Open()
Dim dt = New DataTable()
myDA = New OleDbDataAdapter(cmd)
Dim builder As OleDbCommandBuilder = New OleDbCommandBuilder(myDA)
myDataSet = New DataSet()
myDA.Fill(myDataSet, "CARTM001")
DataGridView1.DataSource = myDataSet.Tables("CARTM001").DefaultView
con.Close()
con = Nothing
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Me.myDA.Update(Me.myDataSet.Tables("CARTM001"))
Me.myDataSet.Tables("CARTM001").AcceptChanges()
Me.myDA.Fill(Me.myDataSet.Tables("CARTM001"))
End Sub
End Class```
您不能使用命令生成器。您需要自己创建动作命令。如果只想更新一个表,那么只需要一个数据适配器,但如果要更新两个表,则由于Access每个命令只支持一条SQL语句,因此需要两个数据适配器。
单个数据适配器可能如下所示:
Dim updateCommand As New OleDbCommand("UPDATE MyTable SET MyColumn = @MyColumn WHERE Id = @Id", myConnection)
updateCommand.Parameters.Add("@MyColumn", OleDbType.VarChar, 50, "MyColumn")
updateCommand.Parameters.Add("@Id", OleDbType.Integer, 0, "Id")
myDataAdapter.UpdateCommand = updateCommand
myDataAdapter.Update(myDataTable)
多个数据适配器可能如下所示:
Dim firstUpdateCommand As New OleDbCommand("UPDATE FirstTable SET FirstColumn = @FirstColumn WHERE FirstId = @FirstId", myConnection)
firstUpdateCommand.Parameters.Add("@FirstColumn", OleDbType.VarChar, 50, "FirstColumn")
firstUpdateCommand.Parameters.Add("@FirstId", OleDbType.Integer, 0, "FirstId")
firstDataAdapter.UpdateCommand = firstUpdateCommand
firstDataAdapter.AcceptChangesOnUpdate = False
firstDataAdapter.Update(myDataTable)
Dim secondUpdateCommand As New OleDbCommand("UPDATE SecondTable SET SecondColumn = @SecondColumn WHERE SecondId = @SecondId", myConnection)
firstUpdateCommand.Parameters.Add("@SecondColumn", OleDbType.VarChar, 50, "SecondColumn")
firstUpdateCommand.Parameters.Add("@SecondId", OleDbType.Integer, 0, "SecondId")
secondDataAdapter.UpdateCommand = secondUpdateCommand
secondDataAdapter.Update(myDataTable)
请注意,必须在第一个数据适配器上将AcceptChangesOnUpdate
设置为False
,否则第一个Update
调用将隐式调用DataTable
上的AcceptChanges
,第二个数据适配器将不会保存任何更改。