gpt4 book ai didi

sql - 关于 SQL 语句的语法,我错过了什么?

转载 作者:行者123 更新时间:2023-12-03 08:26:14 24 4
gpt4 key购买 nike

我正在编写代码以将用户名和密码插入到名为 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 错误。

This is what the SQL statement looks when with "bh106" being the Username and "ZLTga" being the Password

最佳答案

这是使用参数的一种方式。使用参数非常重要,否则您将面临 SQL 注入(inject)的风险,这可能会破坏您的数据库。实际上,以这种方式编写 SQL 语句要容易得多,因为您不必担心字符串中的所有引号是否正确。
Using...End Using block 确保即使出现错误,您的数据库对象也已关闭和处置。这很重要,因为它会释放所有正在使用的非托管资源。

在实际应用程序中,您永远不会将密码保存为纯文本,但这是另一天的主题。

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com