Mysql SQL UPDATE语句中出现语法错误,但看起来一切正常:(
我在数据库中的一个表中遇到此错误: (System.Data.dll中出现类型为Mysql SQL UPDATE语句中出现语法错误,但看起来一切正常:(,mysql,sql,vb.net,Mysql,Sql,Vb.net,我在数据库中的一个表中遇到此错误: (System.Data.dll中出现类型为System.Data.OleDb.OLEDBEException的异常,但未在用户代码中处理。) 其他信息:UPDATE语句中的语法错误。) 它允许我从中读取数据,但当我添加新记录或使用SQL查询更新它时,它会给我这个错误,我已经检查过、重复检查过、重复检查过,但看不出有任何错误……奇怪的是,我从另一个表中获取了它,我知道它正在工作,并确保我更改了所有变量,但没有任何效果 抱歉,如果你们都认为这是一个非常肮脏的代码
System.Data.OleDb.OLEDBEException
的异常,但未在用户代码中处理。)
其他信息:UPDATE语句中的语法错误。)
它允许我从中读取数据,但当我添加新记录或使用SQL查询更新它时,它会给我这个错误,我已经检查过、重复检查过、重复检查过,但看不出有任何错误……奇怪的是,我从另一个表中获取了它,我知道它正在工作,并确保我更改了所有变量,但没有任何效果
抱歉,如果你们都认为这是一个非常肮脏的代码,这是我第一年的项目,我仍然在寻找更快的方法来做事情
如果有人能看一看,看看他们是否能弄明白,那将不胜感激
Sub Update()
Dim cs As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("mydatabasename") + ";"
Dim cn As New OleDbConnection(cs)
Dim cmd As OleDbCommand
Dim r As OleDbDataReader
Dim ite As String
Dim siz As String
Dim quantit As String
Dim pric As String
Dim sourc As String
Dim updatestockstrings As String
updatestockstrings = Request.QueryString("updatestock")
ite = itm.Value
siz = sze.Value
quantit = qty.Value
pric = prc.Value
sourc = imgsrc.Value
If ite = "" Then
parMsg.InnerHtml = "Please add an item name"
ElseIf siz = "" Then
parMsg.InnerHtml = "Please add a size"
ElseIf quantit = "" Then
parMsg.InnerHtml = "Please add a quantity"
ElseIf pric = "" Then
parMsg.InnerHtml = "Please state a price"
ElseIf sourc = "" Then
parMsg.InnerHtml = "Please add an image source"
Else
cmd = New OleDbCommand("UPDATE Stocks Set Item='" & ite & "', Size='" & siz & "', Quantity='" & quantit & "', Price='" & pric & "', ImageSource='" & sourc & "' WHERE StockID=" & updatestockstrings & ";", cn)
cn.Open()
r = cmd.ExecuteReader()
Do While r.Read()
Loop
cn.Close()
parMsg.InnerHtml = "Update Successful!"
End If
End Sub
SIZE是MS Access中的保留字,您需要在其周围放置方括号
[SIZE]=......
但我确实建议使用参数化查询来防止SQL注入和解析问题(如果一个或多个输入字符串包含一个引号会发生什么情况?)
但这仍然不够。您应该为基础数据库字段传递具有正确数据类型的参数。因此,例如,如果数据库字段
Price
是十进制列,则需要将pric
变量转换为十进制值(这要求您对其进行分析,以确保收到了有效的十进制值)大小是MS Access中的保留字,需要在其周围放上方括号
[SIZE]=......
但我确实建议使用参数化查询来防止SQL注入和解析问题(如果一个或多个输入字符串包含一个引号会发生什么情况?)
但这仍然不够。您应该为基础数据库字段传递具有正确数据类型的参数。因此,例如,如果数据库字段
Price
是十进制列,则需要将pric
变量转换为十进制值(这要求您对其进行分析,以确保收到了有效的十进制值)大小是MS Access中的保留字,需要在其周围放上方括号
[SIZE]=......
但我确实建议使用参数化查询来防止SQL注入和解析问题(如果一个或多个输入字符串包含一个引号会发生什么情况?)
但这仍然不够。您应该为基础数据库字段传递具有正确数据类型的参数。因此,例如,如果数据库字段
Price
是十进制列,则需要将pric
变量转换为十进制值(这要求您对其进行分析,以确保收到了有效的十进制值)大小是MS Access中的保留字,需要在其周围放上方括号
[SIZE]=......
但我确实建议使用参数化查询来防止SQL注入和解析问题(如果一个或多个输入字符串包含一个引号会发生什么情况?)
但这仍然不够。您应该为基础数据库字段传递具有正确数据类型的参数。因此,例如,如果数据库字段Price
是十进制列,则需要将pric
变量转换为十进制值(这要求您对其进行分析,以确保您收到了有效的十进制值)在扩展到中,在发布时
您必须在诸如INSERT
、UPDATE
和DELETE
之类的语句上使用。它返回受影响的记录数,但不返回要从中读取记录的ResultSet
用于返回一组要读取的记录的SELECT
语句
更改:
cn.Open()
r = cmd.ExecuteReader()
Do While r.Read()
Loop
cn.Close()
cn.Open()
cmd.ExecuteNonQuery()
cn.Close()
至:
cn.Open()
r = cmd.ExecuteReader()
Do While r.Read()
Loop
cn.Close()
cn.Open()
cmd.ExecuteNonQuery()
cn.Close()
除非需要,否则将执行查询的结果捕获为整数是可选的。在您的发布中,作为扩展
您必须在诸如INSERT
、UPDATE
和DELETE
之类的语句上使用。它返回受影响的记录数,但不返回要从中读取记录的ResultSet
用于返回一组要读取的记录的SELECT
语句
更改:
cn.Open()
r = cmd.ExecuteReader()
Do While r.Read()
Loop
cn.Close()
cn.Open()
cmd.ExecuteNonQuery()
cn.Close()
至:
cn.Open()
r = cmd.ExecuteReader()
Do While r.Read()
Loop
cn.Close()
cn.Open()
cmd.ExecuteNonQuery()
cn.Close()
除非需要,否则将执行查询的结果捕获为整数是可选的。在您的发布中,作为扩展
您必须在诸如INSERT
、UPDATE
和DELETE
之类的语句上使用。它返回受影响的记录数,但不返回要从中读取记录的ResultSet
用于返回一组要读取的记录的SELECT
语句
更改:
cn.Open()
r = cmd.ExecuteReader()
Do While r.Read()
Loop
cn.Close()
cn.Open()
cmd.ExecuteNonQuery()
cn.Close()
至:
cn.Open()
r = cmd.ExecuteReader()
Do While r.Read()
Loop
cn.Close()
cn.Open()
cmd.ExecuteNonQuery()
cn.Close()
除非需要,否则将执行查询的结果捕获为整数是可选的。在您的发布中,作为扩展
您必须在诸如INSERT
、UPDATE
和DELETE
之类的语句上使用。它返回受影响的记录数,但不返回要从中读取记录的ResultSet
用于返回一组要读取的记录的SELECT
语句
更改:
cn.Open()
r = cmd.ExecuteReader()
Do While r.Read()
Loop
cn.Close()
cn.Open()
cmd.ExecuteNonQuery()
cn.Close()
至:
cn.Open()
r = cmd.ExecuteReader()
Do While r.Read()
Loop
cn.Close()
cn.Open()
cmd.ExecuteNonQuery()
cn.Close()
除非需要,否则将
ExecuteNonQuery的结果捕获为整数是可选的。可能是一个断章取义的问题,即为什么上面的每个变量都缺少最后一个字母?首先,停止连接SQL语句。搜索SQL注入,然后在此处搜索“vb.net参数化查询”。若要解决当前问题,请将SQL存储在字符串中(而不是直接放在OleDBCommand中),并添加一个messagebox,显示已完成的SQL语句。如果