我正在尝试插入访问数据库,而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中编码。在查询中,除自动编号字段外,设置所有字段值。
答案 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