尝试使用VB 2013向Access 2010数据库添加一行。当出现此错误时,所有内容似乎都在UPDATE
语句之前有效:
在使用新行传递DataRow集合时,更新需要有效的InsertCommand。
我的代码是:
Dim sqlConnection As New System.Data.OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\CLI_CRVM.accdb")
Dim cmd As New System.Data.OleDb.OleDbCommand()
Dim ds As New DataSet1()
cmd.CommandType = System.Data.CommandType.Text
cmd.CommandText = "SELECT * FROM [extract] ;"
cmd.Connection = sqlConnection
sqlConnection.Open()
Dim da = New OleDb.OleDbDataAdapter(cmd.CommandText, sqlConnection)
da.Fill(ds, "extract")
ds.Clear()
Dim newExtractRow As DataRow = ds.Tables("extract").NewRow()
newExtractRow("Field1") = "ABC123"
ds.Tables("Extract").Rows.Add(newExtractRow)
da.Update(ds, "Extract")
sqlConnection.Close()
到目前为止,我发现的所有内容似乎都引用了SQL数据库,而不是OleDb连接。
答案 0 :(得分:3)
您可以使用OleDbCommandBuilder,如此
' your existing OleDbDataAdapter
Dim da = New OleDb.OleDbDataAdapter(cmd.CommandText, sqlConnection)
' add the following lines:
Dim cb = New OleDbCommandBuilder(da)
cb.QuotePrefix = "["
cb.QuoteSuffix = "]"
详情请见
对于名为extract
且具有字段
ID - 自动编号,主键
Field1 - 文本(255)
和数据
ID Field1
-- -------
1 TEST999
以下VB.NET代码将在Access数据库的表中插入第二行
Using con As New OleDbConnection
con.ConnectionString =
"Provider=Microsoft.ACE.OLEDB.12.0;" &
"Data Source=C:\Users\Public\Database1.accdb;"
con.Open()
Using da As New OleDbDataAdapter("SELECT * FROM [extract]", con)
Dim cb = New OleDbCommandBuilder(da)
cb.QuotePrefix = "["
cb.QuoteSuffix = "]"
Dim dt = New DataTable
da.Fill(dt)
Dim dr As DataRow = dt.NewRow
dr("Field1") = "ABC123"
dt.Rows.Add(dr)
da.Update(dt)
End Using
con.Close()
End Using
结果
ID Field1
-- -------
1 TEST999
2 ABC123
OleDbCommandBuilder对象自动(并且不可见)根据创建OleDbDataAdapter对象时提供的SELECT命令创建INSERT,UPDATE和DELETE命令。
答案 1 :(得分:0)
您需要设置InsertCommand
属性
Dim da = New OleDb.OleDbDataAdapter(cmd.CommandText, sqlConnection)
da.InsertCommand = cmd
da.Fill(ds, "extract")
更多信息 here