首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >总有一个错误.不知道为什么

总有一个错误.不知道为什么
EN

Stack Overflow用户
提问于 2013-08-12 07:42:36
回答 3查看 1.1K关注 0票数 1

我认为我的插入/语法是正确的,但是当我运行项目时总是有一个错误.在这段代码中,我试图使用vb2012 (这里的代码)将数据添加到我的数据库ms access 2013中。

代码语言:javascript
复制
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

这就是错误..。

代码语言:javascript
复制
An unhandled exception of type 'System.Data.OleDb.OleDbException' occurred in System.Data.dll

Additional information: Syntax error in INSERT INTO statement.
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-08-12 12:36:46

我认为,如果问题是由于VALUES子句中引用错误造成的,那么您将得到一个不同的错误,要么是“条件表达式中的数据类型不匹配”,要么是db引擎需要参数值但没有提供参数值的消息。

我猜想语法错误是由于Transaction保留字这一事实造成的。当将表名括在方括号中时,查看它是否有效。

代码语言:javascript
复制
insert into [Transaction] (Customer_Name, Job,  ... 

如果这种改变消除了错误,我认为你不应该就此止步。按照其他人的建议,切换到参数查询,而不是将值构建为字符串并执行字符串。除了防止SQL注入错误之外,参数查询还可以避免VALUES子句中引号的复杂性。如果你遵循这个建议,你仍然应该用括号表示[Transaction]。更好的是,如果可能的话,将表名更改为非保留字。

票数 0
EN

Stack Overflow用户

发布于 2013-08-12 08:13:45

尽管将单引号放在名称(‘’& C_name.Text &‘’)很重要,但猜测您的金额不是varchar列,因此您可能会删除该字段的单引号。

调试它的最佳方法是观察生成的insert命令(string值),并检查与表设计相比是否存在语法错误。

票数 0
EN

Stack Overflow用户

发布于 2013-08-12 13:37:23

customer_name没有被引用。您也通过了.Length,我不认为这是您想要做的。

最重要的是,您应该将所有内容都放在参数中。

代码语言:javascript
复制
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))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18181772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档