DataSet更新错误需要InsertCommand

时间:2014-09-29 15:10:02

标签: vb.net ms-access-2010 oledb

尝试使用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连接。

2 个答案:

答案 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 = "]"

详情请见

OleDbCommandBuilder Class

工作示例

对于名为extract且具有字段

的Access表

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