sql - 关于 SQL 语句的语法,我错过了什么?
问题描述
我正在编写代码以将用户名和密码插入到名为 Users 的数据库中。
当我尝试运行代码时,它说 INSERT 语句的语法有错误,但我终生无法找到它。
我正在使用另一个名为 RunSQL 的函数运行 SQL 语句,如果需要,我可以提交该函数,但它与我使用它运行的所有其他 SQL 语句都可以正常工作。
用户表有以下列及其数据类型 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
该代码应该从用户名和密码文本框中获取值并将它们插入到用户表中,但到目前为止它只抛出了一个 SQL 错误。
解决方案
这是使用参数的一种方式。使用参数非常重要,否则您将面临 SQL 注入的风险,这可能会破坏您的数据库。实际上,以这种方式编写 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 查询中的第一个表中提取所有记录
- c# - 如何通过 C# 代码在 Azure IoT 中心门户中检查 IoT 设备的状态(启用或禁用)?
- python - Gmail python sdk:按历史ID获取邮件
- python - 有谁知道修复 CherryPy ssl 协议错误的方法?
- asp.net-core - 如何在 MEF 框架的构造函数中获取与 AspNet Core Identity UserManager 实现相同的对象
- python - 输出未显示附加元素的完整列表
- unity3d - 带有 Webgl 套接字异常错误的 Unity Mirror
- laravel - Windows 机器上 NGINX 中的 Laravel Route 无法正常工作
- javascript - 从 NodeJS+ExpressJS 的服务器内的目录中获取 JSON
- elasticsearch-curator - 是否可以在不丢失目标索引中的更新的情况下使用 elasticsearch-curator 拍摄快照和还原?