我认为我的插入/语法是正确的,但是当我运行项目时总会出现错误... 在这段代码中,我正在尝试使用vb2012将数据添加到我的数据库ms access 2013中 代码......
Private Sub btnadd_Click(sender As Object, e As EventArgs) Handles btnadd.Click
provider = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
dataFile = "C:\Users\hp-2\Documents\Visual Studio 2012\Projects\Delta\Delta.mdb"
connString = provider & dataFile
cnn.ConnectionString = connString
cnn.Open()
cmd.Connection = cnn
addstring = "insert into Transaction (Customer_Name, Job, Trans_date, Amount ) values (" & C_name.Text & ",'" & C_job.Text.Length & "','" & t_date.Text & "','" & t_amount.Text & "');"
cmd = New OleDbCommand(addstring, cnn)
cmd.ExecuteNonQuery()
cnn.Close()
End Sub
这是错误...
An unhandled exception of type 'System.Data.OleDb.OleDbException' occurred in System.Data.dll
Additional information: Syntax error in INSERT INTO statement.
答案 0 :(得分:0)
虽然将单引号放入名称('“& C_name.Text&”')是必不可少的,但猜猜你的金额不是varchar列,所以可能你可以为该字段取单引号。
调试此方法的最佳方法是观察生成的insert命令(字符串值),并检查与表设计相比是否存在任何语法错误。
答案 1 :(得分:0)
我认为如果问题是由VALUES
子句中的错误引用引起的,那么您会得到一个不同的错误,“条件表达式中的数据类型不匹配”,或者是一条消息数据库引擎需要一个参数值但你没有提供。
我的猜测是语法错误是由于Transaction
是reserved word这一事实。当将表名括在方括号中时,查看它是否有效。
insert into [Transaction] (Customer_Name, Job, ...
如果这种改变消除了错误,我认为你不应该就此止步。像其他人建议的那样切换到参数查询,而不是将值构建到字符串中并执行字符串。除了防止SQL注入错误之外,参数查询还可以避免VALUES
子句中的引号并发症。如果你遵循这个建议,你仍然应该[Transaction]
。更好的是,如果可能的话,将表名更改为非保留字。
答案 2 :(得分:0)
customer_name不在引用中。你也在路过.Length,我不认为你想做什么。
最重要的是,你应该把所有东西放在参数中。
addstring = "insert into Transaction (Customer_Name, Job, Trans_date, Amount ) values (@Customer_Name, @Job, @Trans_date, @Amount);"
cmd = New OleDbCommand(addstring, cnn)
cmd.Parameters.AddWithValue("@Customer_Name", C_name.Text)
cmd.Parameters.AddWithValue("@Job", C_job.Text)
cmd.Parameters.AddWithValue("@Trans_date", Convert.ToDateTime(t_date.Text))
cmd.Parameters.AddWithValue("@Amount", Convert.ToInt32(t_amount.Text))