我正在编写代码以将用户名和密码插入到名为Users的数据库中。
当我尝试运行代码时,它说INSERT语句的语法有错误,但是我终生找不到它。
我正在使用另一个名为RunSQL的函数运行SQL语句,该函数可以在需要时提交,但它与我运行过的所有其他SQL语句都可以正常工作。
Users表具有其数据类型的以下列
User_ID-自动编号(主键)
用户名-短文本
密码-短文本
我尝试在要插入表中的值周围添加'',并删除&并将其设为一个连续的字符串。我尝试添加/删除;但没有任何效果。
Dim sql As String = "INSERT INTO Users (Username, Password) " &
"VALUES (" & username_Textbox.Text & " , " & password_Textbox.Text & ");"
RunSQL(sql)
MessageBox.Show("User Added")
Private Sub RunSQL(ByVal sql As String)
Dim conn As OleDbConnection = New
OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Paper_Gen_Database.accdb;")
conn.Open()
Dim cmd As New OleDbCommand(sql, conn)
cmd.ExecuteNonQuery()
System.Threading.Thread.Sleep(500)
End Sub
该代码应从用户名和密码文本框中获取值,并将其插入到Users表中,但到目前为止,它仅抛出SQL错误。
This is what the SQL statement looks when with "bh106" being the Username and "ZLTga" being the Password
最佳答案
这是使用参数的一种方法。使用参数非常重要,因为否则会冒着SQL注入(inject)的风险,这可能会破坏数据库。用这种方式编写SQL语句实际上要容易得多,因为您不必担心字符串中的所有引号是否正确。Using...End Using
块确保即使发生错误也可以关闭和处置数据库对象。这很重要,因为它会释放所有正在使用的非托管资源。
在真实的应用程序中,您永远不会将密码另存为纯文本,但这是另一天的主题。
Private Sub InsertUser()
Dim sql As String = "INSERT INTO Users (Username, [Password]) VALUES (@username, @password);"
Using conn As OleDbConnection = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Paper_Gen_Database.accdb;")
Using cmd As New OleDbCommand(sql, conn)
cmd.Parameters.Add("@username", OleDbType.VarChar).Value = username_Textbox.Text
cmd.Parameters.Add("@password", OleDbType.VarChar).Value = password_Textbox.Text
conn.Open()
cmd.ExecuteNonQuery()
End Using
End Using
MessageBox.Show("User Added")
End Sub
在Access中,添加参数的顺序必须与它们在SQL语句中出现的顺序匹配。
关于sql - 关于SQL语句的语法,我错过了什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54480676/