使用AutoNumber PK插入Access DB并获取Insert语法错误

时间:2010-02-18 00:34:11

标签: database vb.net ms-access insert autonumber

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

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

   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中编码。在查询中,除自动编号字段外,设置所有字段值。

3 个答案:

答案 0 :(得分:5)

我敢向甜甜圈打赌这个问题是因为日期和用户都是保留字。将它们括在方括号中:

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

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

答案 1 :(得分:1)

在线上设置断点

cmd.ExecuteNonQuery()

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

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

Date.Now.ToString

将是:

"#" & Date.Now.ToString("yyyy-mm-dd") & "#"

答案 2 :(得分:0)

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

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

要获取该号码,您需要在同一连接上使用第二个语句:

SELECT @@identity