【发布时间】:2019-01-26 15:52:57
【问题描述】:
对于我的计算机科学项目,我正在使用 Microsoft 访问数据库来使用 Windows 窗体在 Visual Basic 中创建一个测验应用程序。我所有的选择语句(使用 oledb 连接到数据库)都能正常工作;但是这个插入语句总是抛出“插入语句中的语法错误”,但据我所知,它没有任何问题。有问题的表称为“用户”,字段为“用户 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 是到数据库的连接,该连接已经从其他已运行和终止的命令打开。我希望在用户表中创建一条新记录,并在文本框中输入值;但它只是抛出上述错误。
【问题讨论】:
-
我猜测用户和 ( 以及 VALUES 和 ( 之间缺少空格。调试 sql 字符串以查看输出 - 通常,一旦你这样做,问题就很明显了
-
我怀疑
False无效。0有效吗? (True将是-1。)另外,你真的应该使用 SQL 参数来传递值,否则它可能会出错。 -
IDK 谁告诉你的?语法不区分大小写?
-
SQL Injection alert - 您应该不将您的 SQL 语句连接在一起 - 使用 参数化查询 来避免 SQL 注入 - 查看Little Bobby Tables
-
密码应该永远保存为纯文本。它们必须加盐和散列
标签: sql vb.net oledb insert-into