0

我正在尝试插入访问数据库,PK 是由数据库生成的自动编号。我收到插入语句的语法错误,不知道为什么。如果可能的话,我想在同一个语句中返回自动编号值。

这是我到目前为止得到的。

   Dim cn As OleDbConnection
    Dim cmd As OleDbCommand
    Dim str As String

    Try
        cn = New OleDbConnection("Provider=microsoft.Jet.OLEDB.4.0;Data Source=G:\Sean\BMSBonder3_0.mdb;")
        cn.Open()
        str = String.Format("Insert into Bonder(BonderName, BonderConfig, Date, User) values ('{0}', '{1}', '{2}', '{3}')", addBonder.BonderName _
                    , xmlString, Date.Now.ToString, Environment.UserName)
        MsgBox(str)
        cmd = New OleDbCommand(str, cn)
        cmd.ExecuteNonQuery()
        cn.Close()

    Catch ex As Exception
        MsgBox(ex.Message)
        Return False
    End Try

    Return Nothing

显然是在 VB.Net 中编码。在查询中,除自动编号字段外,所有字段值均已设置。

4

3 回答 3

5

我向甜甜圈打赌,问题是因为 Date 和 User 是保留字。将它们括在方括号中:

str = String.Format("Insert into Bonder(BonderName, BonderConfig, [Date], [User]) ....

更好的是,将数据库中的字段重命名为非保留字以防止进一步的头痛。

于 2010-02-18T01:12:36.810 回答
1

在行上放一个断点

cmd.ExecuteNonQuery()

并将 str 的值复制到 Access 查询窗口并从那里运行查询。Access 查询窗口可能会查明问题所在。

如果将日期插入 Access,则需要在日期的任一侧放置一个哈希。所以价值:

Date.Now.ToString

将会:

"#" & Date.Now.ToString("yyyy-mm-dd") & "#"
于 2010-02-18T01:16:26.133 回答
0

除了硬编码的注释之外,Access 中日期的分隔符是哈希(我现在看到 hawbsl 提到了这一点):

 "Insert into Bonder(BonderName, BonderConfig, Date, User) values ('{0}', '{1}', #{2}#, '{3}')

要获取该号码,您需要在同一连接上添加第二条语句:

SELECT @@identity
于 2010-02-18T01:19:45.450 回答