在 INSERT INTO 语句中插入值时出现语法错误。 -VB 和 ACCESS 2013
Syntax error in inserting values in INSERT INTO statement. -VB and ACCESS 2013
再次原谅我问这个愚蠢的问题但是...我真的不知道如何解决这个插入值时的另一个语法错误
在我的数据库(访问 2013)中,我的 table
中有这些字段
字段 - 数据类型
否 - 数量
排名 - 短文本
姓氏 - 短文本
名字 - 短文本
中间名 - 短文本
地址 - 短文本
联系电话 - 短文本
ACCNT 代码 - 短文本
单位代码 - 数字
ATM 账户号码 - 号码
养老金类型 - 短文本
备注 - 短文本
这是我的代码:
Imports System.Data.OleDb
Public Class Form2
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Dim con As New OleDbConnection
con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Retiree.accdb"
Dim cmd As New OleDb.OleDbCommand
If Not con.State = ConnectionState.Open Then
con.Open()
End If
cmd.Connection = con
cmd.CommandText = "INSERT INTO Retiree([NO], [RANK], [LAST NAME], [FIRST NAME], [MIDDLE NAME], [ADDRESS], [CONTACT NUMBER], [ACCNT CODE], [UNIT CODE], [ATM ACCNT NUMBER], [PENSION TYPE], [REMARKS]) VALUES(" & num & ",'" & TextBox4.Text & "','" & TextBox3.Text & "','" & TextBox2.Text & "','" & TextBox5.Text & "','" & RichTextBox1.Text & "','" & TextBox16.Text & "','" & TextBox15.Text & "'," & TextBox14.Text & "," & TextBox13.Text & ",'" & TextBox12.Text & "','" & TextBox1.Text & "')"
cmd.ExecuteNonQuery()
con.Close()
Me.Close()
End Sub
End Class
文本框和富文本框的内容可能导致语法错误。这是我的建议:
编辑插入语句,不要包含任何文本框或富文本值,只需对这些列使用“”(空字符串)。如果可行,则表示文本框或富文本框的内容导致了语法错误。
开始在文本框和富文本值中添加,一次一个,直到出现语法错误。然后您将看到是哪一个导致了问题。很可能是富文本框。
这不是编写插入语句的好方法,因为如果用户在任何文本框中放置单引号,就会出现 SQL 语法错误。您需要在代码中从用户输入的数据中删除单引号,或者更好的是,为用户输入的数据使用参数,这样它就不会影响语句的语法。
如果一切都失败了,请在执行该行代码之后但在执行 cmd.ExecuteNonQuery() 之前向我们提供 cmd.CommandText 属性 的内容,这样我们可以看到正在执行的完整和真实的 SQL 语句,然后我们可以看到语法错误。
哈哈 :) 好的,我弄清楚了我的问题。我只需要将文本框的内容转换为 int ,它应该是数据类型为 number
的字段的插入值
cmd.CommandText = "INSERT INTO Retiree([NO], [RANK], [LAST NAME], [FIRST NAME], [MIDDLE NAME], [ADDRESS], [CONTACT NUMBER], [ACCNT CODE], [UNIT CODE], [ATM ACCNT NUMBER], [PENSION TYPE], [REMARKS]) VALUES(" & num & ",'" & TextBox4.Text & "','" & TextBox3.Text & "','" & TextBox2.Text & "','" & TextBox5.Text & "','" & RichTextBox1.Text & "','" & TextBox16.Text & "','" & TextBox15.Text & "'," & Convert.ToInt32(TextBox14.Text) & "," & Convert.ToInt32(TextBox13.Text) & ",'" & TextBox12.Text & "','" & TextBox1.Text & "') "
但我仍然想知道如何将其参数化以防止 sql 注入
How can I Parametized my query??
您可以使用类似这样的代码:
Using cmd As New OleDbCommand
cmd.Connection = con
cmd.CommandText =
"INSERT INTO Retiree ([NO], [RANK], [LAST NAME], [FIRST NAME], [MIDDLE NAME], [ADDRESS], [CONTACT NUMBER], [ACCNT CODE], [UNIT CODE], [ATM ACCNT NUMBER], [PENSION TYPE], [REMARKS]) " &
"VALUES (?,?,?,?,?,?,?,?,?,?,?,?)"
cmd.Parameters.Add("?", OleDbType.Integer).Value = num ' [NO]
cmd.Parameters.Add("?", OleDbType.VarWChar, 255).Value = TextBox4.Text ' [RANK]
cmd.Parameters.Add("?", OleDbType.VarWChar, 255).Value = TextBox3.Text ' [LAST NAME]
' ... and so on
cmd.Parameters.Add("?", OleDbType.VarWChar, 255).Value = TextBox1.Text ' [REMARKS]
cmd.ExecuteNonQuery()
End Using
再次原谅我问这个愚蠢的问题但是...我真的不知道如何解决这个插入值时的另一个语法错误
在我的数据库(访问 2013)中,我的 table
中有这些字段字段 - 数据类型
否 - 数量
排名 - 短文本
姓氏 - 短文本
名字 - 短文本
中间名 - 短文本
地址 - 短文本
联系电话 - 短文本
ACCNT 代码 - 短文本
单位代码 - 数字
ATM 账户号码 - 号码
养老金类型 - 短文本
备注 - 短文本
这是我的代码:
Imports System.Data.OleDb
Public Class Form2
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Dim con As New OleDbConnection
con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Retiree.accdb"
Dim cmd As New OleDb.OleDbCommand
If Not con.State = ConnectionState.Open Then
con.Open()
End If
cmd.Connection = con
cmd.CommandText = "INSERT INTO Retiree([NO], [RANK], [LAST NAME], [FIRST NAME], [MIDDLE NAME], [ADDRESS], [CONTACT NUMBER], [ACCNT CODE], [UNIT CODE], [ATM ACCNT NUMBER], [PENSION TYPE], [REMARKS]) VALUES(" & num & ",'" & TextBox4.Text & "','" & TextBox3.Text & "','" & TextBox2.Text & "','" & TextBox5.Text & "','" & RichTextBox1.Text & "','" & TextBox16.Text & "','" & TextBox15.Text & "'," & TextBox14.Text & "," & TextBox13.Text & ",'" & TextBox12.Text & "','" & TextBox1.Text & "')"
cmd.ExecuteNonQuery()
con.Close()
Me.Close()
End Sub
End Class
文本框和富文本框的内容可能导致语法错误。这是我的建议:
编辑插入语句,不要包含任何文本框或富文本值,只需对这些列使用“”(空字符串)。如果可行,则表示文本框或富文本框的内容导致了语法错误。
开始在文本框和富文本值中添加,一次一个,直到出现语法错误。然后您将看到是哪一个导致了问题。很可能是富文本框。
这不是编写插入语句的好方法,因为如果用户在任何文本框中放置单引号,就会出现 SQL 语法错误。您需要在代码中从用户输入的数据中删除单引号,或者更好的是,为用户输入的数据使用参数,这样它就不会影响语句的语法。
如果一切都失败了,请在执行该行代码之后但在执行 cmd.ExecuteNonQuery() 之前向我们提供 cmd.CommandText 属性 的内容,这样我们可以看到正在执行的完整和真实的 SQL 语句,然后我们可以看到语法错误。
哈哈 :) 好的,我弄清楚了我的问题。我只需要将文本框的内容转换为 int ,它应该是数据类型为 number
的字段的插入值cmd.CommandText = "INSERT INTO Retiree([NO], [RANK], [LAST NAME], [FIRST NAME], [MIDDLE NAME], [ADDRESS], [CONTACT NUMBER], [ACCNT CODE], [UNIT CODE], [ATM ACCNT NUMBER], [PENSION TYPE], [REMARKS]) VALUES(" & num & ",'" & TextBox4.Text & "','" & TextBox3.Text & "','" & TextBox2.Text & "','" & TextBox5.Text & "','" & RichTextBox1.Text & "','" & TextBox16.Text & "','" & TextBox15.Text & "'," & Convert.ToInt32(TextBox14.Text) & "," & Convert.ToInt32(TextBox13.Text) & ",'" & TextBox12.Text & "','" & TextBox1.Text & "') "
但我仍然想知道如何将其参数化以防止 sql 注入
How can I Parametized my query??
您可以使用类似这样的代码:
Using cmd As New OleDbCommand
cmd.Connection = con
cmd.CommandText =
"INSERT INTO Retiree ([NO], [RANK], [LAST NAME], [FIRST NAME], [MIDDLE NAME], [ADDRESS], [CONTACT NUMBER], [ACCNT CODE], [UNIT CODE], [ATM ACCNT NUMBER], [PENSION TYPE], [REMARKS]) " &
"VALUES (?,?,?,?,?,?,?,?,?,?,?,?)"
cmd.Parameters.Add("?", OleDbType.Integer).Value = num ' [NO]
cmd.Parameters.Add("?", OleDbType.VarWChar, 255).Value = TextBox4.Text ' [RANK]
cmd.Parameters.Add("?", OleDbType.VarWChar, 255).Value = TextBox3.Text ' [LAST NAME]
' ... and so on
cmd.Parameters.Add("?", OleDbType.VarWChar, 255).Value = TextBox1.Text ' [REMARKS]
cmd.ExecuteNonQuery()
End Using