如何排序 "Syntax error in insert into statement"

How to sort "Syntax error in insert into statement"

对于我的计算机科学项目,我使用 Microsoft acccess 数据库使用 windows 表单在 Visual Basic 中创建测验应用程序。我所有的 select 语句(使用 oledb 连接到数据库)都能正常工作;但是这个 insert into 语句总是抛出 "Syntax error in Insert Into statement" 但据我所知,它没有任何问题。有问题的 table 称为 'Users',字段为 'UserID'、'FirstName'、'LastName'、'Username'、'Password'、'Teacher';其中 UserID 是一个自动编号,teacher 是布尔值,其余是字符串。

密码将在我完成后进行哈希处理,但这样可以更轻松地测试它们。

我已经尝试为 UserID 输入值,即使它在输入新记录时会自动递增一个值。以及创建插入命令的几种不同方法。

Using oCmd As New OleDbCommand("Insert Into Users(FirstName, LastName, Username, Password, Teacher) 
    Values(@firstName, @lastName, @username, @password, 0)", myConnection)
    oCmd.Parameters.Add("@firstName", OleDbType.VarChar, 255).Value = txtFirstName.Text
    oCmd.Parameters.Add("@lastNamee", OleDbType.VarChar, 255).Value = txtLastName.Text
    oCmd.Parameters.Add("@username", OleDbType.VarChar, 255).Value = txtUsername.Text
    oCmd.Parameters.Add("@password", OleDbType.VarChar, 255).Value = txtPassword.Text
    oCmd.ExecuteNonQuery()
End Using

'txt...'.Text 是文本框,用户可以在其中输入他们想要的值的字符串,而 myConnection 是与数据库的连接,该数据库已经从具有 运行 的其他命令打开并终止。我希望使用在文本框中输入的值在用户 table 中创建一条新记录;但它只是抛出上述错误。

您的 SQL 命令不起作用的真正原因是 Password 应该用反引号 (`) 括起来,因为它是保留字符串。我过去也遇到过类似的问题,我花了很长时间才意识到我的错误。

您还应该使用参数来避免 SQL 注入。最后,您的代码应如下所示:

Using oCmd As New OleDbCommand("INSERT INTO `Users` (FirstName, LastName, Username, `Password`, Teacher) VALUES (@FirstName, @LastName, @Username, @Password, 0)", myConnection)

oCmd.Parameters.Add("@FirstName", OleDBType.VarChar, 63).Value = txtFirstName.Text
oCmd.Parameters.Add("@LastName", OleDBType.VarChar, 63).Value = txtLastName.Text
oCmd.Parameters.Add("@Username", OleDBType.VarChar, 63).Value = txtUsername.Text
oCmd.Parameters.Add("@Password", OleDBType.VarChar, 63).Value = txtPassword.Text

加参数时的63是用来描述varchar可以带多少个字符的。您应该将其更改为数据库中变量使用的数量。