对于我的计算机科学项目,我使用 microsoft acccess 数据库使用 Windows 窗体在 Visual Basic 中创建测验应用程序。我所有的选择语句(使用 oledb 连接到数据库)都可以正常工作;但是这个 insert into 语句总是抛出“Insert Into 语句中的语法错误”,但据我所知,它没有任何问题。有问题的表称为“用户”,包含字段“用户ID”、“名字”、“姓氏”、“用户名”、“密码”、“教师”;其中 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 是到数据库的连接,该连接已经从其他已运行和终止的命令打开。我希望在用户表中创建一个新记录,并在文本框中输入值;但它只是抛出上述错误。
您的 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可以有多少个字符服用。您应该将其更改为数据库中变量使用的数量。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句