Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何对“insert into语句中的语法错误”进行排序_Sql_Vb.net_Oledb_Insert Into - Fatal编程技术网

Sql 如何对“insert into语句中的语法错误”进行排序

Sql 如何对“insert into语句中的语法错误”进行排序,sql,vb.net,oledb,insert-into,Sql,Vb.net,Oledb,Insert Into,对于我的计算机科学项目,我正在使用microsoft Access数据库使用windows窗体在visual basic中创建一个测验应用程序。我所有使用oledb连接到数据库的select语句都正常工作;但这个insert into语句总是在insert into语句中抛出语法错误,但就我所见,它并没有任何错误。该表被称为“用户”,其中包含“用户ID”、“名字”、“姓氏”、“用户名”、“密码”、“教师”等字段;其中UserID是一个自动编号,teacher是布尔值,其余是字符串 当我完成时,密

对于我的计算机科学项目,我正在使用microsoft Access数据库使用windows窗体在visual basic中创建一个测验应用程序。我所有使用oledb连接到数据库的select语句都正常工作;但这个insert into语句总是在insert into语句中抛出语法错误,但就我所见,它并没有任何错误。该表被称为“用户”,其中包含“用户ID”、“名字”、“姓氏”、“用户名”、“密码”、“教师”等字段;其中UserID是一个自动编号,teacher是布尔值,其余是字符串

当我完成时,密码将被散列,但这样测试它们就更容易了

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

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…”。文本是用户可以在其中输入所需值的字符串的文本框,myConnection是与数据库的连接,该数据库已从运行和终止的其他命令打开。我希望在users表中创建一个新记录,并在文本框中输入值;但是它只是抛出上面所述的错误。

SQL命令不起作用的真正原因是密码应该被反勾号包围,因为它是一个保留字符串。我过去也有过类似的问题,我花了很长时间才意识到我的错误

您还应该使用参数来避免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可以包含多少个字符。您应该将其更改为数据库中变量的使用量。

我猜用户和之间以及值和之间缺少空格。调试sql字符串以查看输出-通常情况下,一旦您这样做,问题就显而易见了,我怀疑False无效。0工作吗?真的应该是-1。另外,您真的应该使用SQL参数来传递值,否则它可能会出错。IDK谁告诉您这是一件事?语法不区分大小写您不应该将SQL语句连接在一起-使用参数化查询来避免SQL注入-签出密码永远不应该保存为纯文本。它们必须是咸的和散列的,实际上,它的密码是保留字;用户是,但不是用户。哦,AddWithValue是一个糟糕的建议:,还有更多。用另一种添加参数的方式更新你的答案可能会让你投上一票;我没有意识到这一点。谢谢你指出这一点。我已经更新了我的答案,以使用更好的参数添加。我想后面的勾号是在MySql中使用的。因为这是OleDb提供程序,所以我猜它是Access,在保留字周围使用方括号。[]您的意思是使用OleDb连接到SqlServer?为什么不使用本机提供程序?