我在插入语句中遇到语法错误

Posted

技术标签:

【中文标题】我在插入语句中遇到语法错误【英文标题】:I'm getting syntax error in insert into statement 【发布时间】:2013-08-19 14:56:06 【问题描述】:

谁能解决下面的代码请...

注意:前端 vb8 和后端访问 7

Private Sub SaveData()
    Dim InsertString As String
    InsertString = "Insert into STUDENT DETAILS(SREGNO,SFIRSTNAME,SMIDDLENAME,SLASTNAME,SYEAR,SCOURSE,SSEM,SCLASS,SLANGUAGE)" & "Values('" & Me.TXTSREGNO.Text & "','" & Me.TXTSFIRSTNAME.Text & "','" & Me.TXTSMIDDLENAME.Text & "','" & Me.TXTSLASTNAME.Text & "','" & Me.COMB1SYEAR.Text & "','" & Me.COMB2SCOURSE.Text & "','" & Me.COMB3SSEM.Text & "','" & Me.COMB4SCLASS.Text & "','" & Me.COMB5SLANGUAGE.Text & " ');"
    Dim InsertCommand As New OleDbCommand(InsertString, Con)
    InsertCommand.ExecuteNonQuery()
    MsgBox("New record added successfully.", MsgBoxStyle.Information, "Record Added")
End Sub

【问题讨论】:

1.打印结果字符串。 2. 与预期字符串进行比较。 3.修复算法。 4. 转到 1。 您能否格式化您的代码,使其更具可读性? 另外,考虑使用参数,构建所有类似的查询可能允许用户在您的文本字段中输入引号和wipe your database。 【参考方案1】:

错误是包含空格的表的名称,因此您需要将其括在方括号中

INSERT INTO [Student Details] ........

但您确实需要知道如何使用参数化查询。 这段代码真的是Sql Injections的邀请

这就是您可以修改代码以使用参数化查询的方式

Dim InsertString As String
InsertString = "Insert into [STUDENT DETAILS] "  & _
"(SREGNO,SFIRSTNAME,SMIDDLENAME,SLASTNAME,SYEAR,SCOURSE,SSEM,SCLASS,SLANGUAGE)" & _
"Values(?,?,?,?,?,?,?,?,?)"
Dim InsertCommand As New OleDbCommand(InsertString, Con)
InsertCommand.Parameters.AddWithValue("@p1", Me.TXTSREGNO.Text )
InsertCommand.Parameters.AddWithValue("@p2", Me.TXTSFIRSTNAME.Text )
InsertCommand.Parameters.AddWithValue("@p3", Me.TXTSMIDDLENAME.Text )
InsertCommand.Parameters.AddWithValue("@p4", Me.TXTSLASTNAME.Text )
InsertCommand.Parameters.AddWithValue("@p5", Me.COMB1SYEAR.Text )
InsertCommand.Parameters.AddWithValue("@p6", Me.COMB2SCOURSE.Text) 
InsertCommand.Parameters.AddWithValue("@p7", Me.COMB3SSEM.Text)
InsertCommand.Parameters.AddWithValue("@p8", Me.COMB4SCLASS.Text )
InsertCommand.Parameters.AddWithValue("@p9", Me.COMB5SLANGUAGE.Text)
InsertCommand.ExecuteNonQuery()

是的,您必须编写更多代码,但 Sql Injection 更安全,并且当您的一个或多个文本框字段碰巧包含单引号时,您将永远不会遇到语法错误。

【讨论】:

以上是关于我在插入语句中遇到语法错误的主要内容,如果未能解决你的问题,请参考以下文章

INSERT INTO 语句 Visual Basic 中的语法错误

插入语句 C# OleDb 中的语法错误

错误:语法错误:应为“)”,但在子查询中得到语句结束语句

学习mysql插入返回语法错误

插入代码错误

插入语句中的 OleDbException 语法错误