2010-02-18 63 views
0

我试图插入访问数据库,PK是由数据库生成的自动编号。我得到一个插入语句的语法错误,不知道为什么。如果可能,我想在同一个语句中返回自动编号值。使用AutoNumber PK插入Access数据库并获取插入语法错误

这是我到目前为止。

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

回答

5

我会打赌美元甜甜圈,问题是因为日期和用户是保留字。请将其用方括号:

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

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

1

将断点上线

cmd.ExecuteNonQuery() 

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

如果在Access中插入日期,您需要在日期的任何一边放置一个散列。因此,值:

Date.Now.ToString 

将是:

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

除了硬编码的意见,在访问日期分隔符是哈希(我现在看到,这是由hawbsl提到):

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

要获得号码,您需要在同一连接上第二个声明:

SELECT @@identity