更新语句语法错误 ASP 经典
Syntax error in Update Statement ASP Classic
我在更新语句的代码中遇到语法错误,在阅读了多篇关于它的帖子后,我无法弄清楚是什么导致了错误。
代码如下:
if request.querystring("do")="customer" then
New_customer = request.Form("customer")
openconn con
sSQL="SELECT RelationNumber FROM Relations WHERE RelationName='" & New_customer & "'"
set rst = con.execute(sSQL)
if rst.EOF then
response.write "No relation found"
else
Relationnumber_update = rst("RelationNumber")
sSQL2="SELECT Number FROM Orders WHERE Relation=" & Relationnumber_update & ""
set rst2 = con.execute(sSQL2)
if rst2.EOF then
response.write("No order number found!")
else
if Relationnumber_update <> 1000 then
Ordernumber_update = rst2("Nummer")
sSQL3="UPDATE Bookings SET Order=" & Ordernumber_update & " WHERE ID=" & request("ID")
con.execute(sSQL3)
else
response.write("Order number 1000 is not allowed!")
end if
end if
end if
closeconn con
response.redirect("myPage.asp?action=page")
response.end
end if
错误发生在行:sSQL3="UPDATE Bookings SET Order=" & Ordernumber_update & " WHERE ID=" & request("ID")
要知道的事情:
- 请求查询字符串来自用户可以在下拉列表中选择客户的表单。见代码:
<form name="ChangeCustomer" method="post" action="myPage.asp?action=page&do=customer&ID=<%=rst("ID")%>" style="display:inline">
- ID 中的第一个来自 select 语句,在该语句之前有效,因为我也以相同的方式在其他代码中使用(确实有效)。
- openconn con 是一个用于访问我的数据库的函数(它有效,原因同上)
- 此代码中的每个 select 语句都已在 response.write 中测试其输出。所有出来的结果都是预期的。
上面代码中发生的事情的简短描述
- 用户在表单中更改客户(使用下拉菜单)并按保存(提交)。
- 在提交时启动查询字符串,测试代码是否真正到达这里并且它确实到达了。
- 所选客户保存在 var
New_customer
.
- 用第一个 select 语句检索与客户名称匹配的关系编号。
- 正在将正确的关系号放入 var
Relationnumber_update
- 在第二个查询中,正在搜索等于关系编号的正确编号。
- A if/then 确保 Relationnumber_update 不等于 1000(不应对此数字进行更新)
- 如果它不等于 1000,则找到的订单号(第二个 select 语句)存储在 var
ordernumber_update
中
- 更新语句跟在预订 table 中的订单字段正在使用找到的订单号更新的地方。
- 最后(在 if 之后)连接被关闭并且页面被 'refreshed'。
出于某种原因,我的更新语句出现语法错误,但我不知道为什么。我检查了订单table中Number字段的数据类型,Relations table中的Relationnumber和bookings table中的Order字段的数据类型,它们都是[=70=类型].
我也尝试直接在更新语句中使用一组数字而不是 ordernumber_update var 进行更新(像这样:sSQL3="UPDATE Bookings SET Order=6477 WHERE ID=" & request("ID")
)但是这给出了同样的错误..
注意数据库管理系统的保留字。
这里你用的是Order
,是保留的
因此,如果您使用 MySQL,请使用此选项:
sSQL3="UPDATE Bookings SET `Order`=" & Ordernumber_update & " WHERE ID=" & request("ID") &";"
或者在 SQL 服务器的情况下:
sSQL3="UPDATE Bookings SET [Order]=" & Ordernumber_update & " WHERE ID=" & request("ID") &";"
希望这对其他人也有帮助。谢谢。
三件事:
- 了解 Sql 注射
要调试 sql 语句 "live",请使用
sSQL3="UPDATE Bookings ...
Response.Write(sSQL3)
'con.execute(sSQL3) -- comment it out
运行 页面,测试结果 sql 查询数据库
如果 ID 具有字符串数据类型(char、varchar 等),那么您应该使用“...”引用它的值
P.S.
使用[Order]处理保留字
在 [Order] 周围使用方括号,而不是单引号。并且不要为您的字段名称使用保留字。只是在说。
我在更新语句的代码中遇到语法错误,在阅读了多篇关于它的帖子后,我无法弄清楚是什么导致了错误。
代码如下:
if request.querystring("do")="customer" then
New_customer = request.Form("customer")
openconn con
sSQL="SELECT RelationNumber FROM Relations WHERE RelationName='" & New_customer & "'"
set rst = con.execute(sSQL)
if rst.EOF then
response.write "No relation found"
else
Relationnumber_update = rst("RelationNumber")
sSQL2="SELECT Number FROM Orders WHERE Relation=" & Relationnumber_update & ""
set rst2 = con.execute(sSQL2)
if rst2.EOF then
response.write("No order number found!")
else
if Relationnumber_update <> 1000 then
Ordernumber_update = rst2("Nummer")
sSQL3="UPDATE Bookings SET Order=" & Ordernumber_update & " WHERE ID=" & request("ID")
con.execute(sSQL3)
else
response.write("Order number 1000 is not allowed!")
end if
end if
end if
closeconn con
response.redirect("myPage.asp?action=page")
response.end
end if
错误发生在行:sSQL3="UPDATE Bookings SET Order=" & Ordernumber_update & " WHERE ID=" & request("ID")
要知道的事情:
- 请求查询字符串来自用户可以在下拉列表中选择客户的表单。见代码:
<form name="ChangeCustomer" method="post" action="myPage.asp?action=page&do=customer&ID=<%=rst("ID")%>" style="display:inline">
- ID 中的第一个来自 select 语句,在该语句之前有效,因为我也以相同的方式在其他代码中使用(确实有效)。
- openconn con 是一个用于访问我的数据库的函数(它有效,原因同上)
- 此代码中的每个 select 语句都已在 response.write 中测试其输出。所有出来的结果都是预期的。
上面代码中发生的事情的简短描述
- 用户在表单中更改客户(使用下拉菜单)并按保存(提交)。
- 在提交时启动查询字符串,测试代码是否真正到达这里并且它确实到达了。
- 所选客户保存在 var
New_customer
. - 用第一个 select 语句检索与客户名称匹配的关系编号。
- 正在将正确的关系号放入 var
Relationnumber_update
- 在第二个查询中,正在搜索等于关系编号的正确编号。
- A if/then 确保 Relationnumber_update 不等于 1000(不应对此数字进行更新)
- 如果它不等于 1000,则找到的订单号(第二个 select 语句)存储在 var
ordernumber_update
中
- 更新语句跟在预订 table 中的订单字段正在使用找到的订单号更新的地方。
- 最后(在 if 之后)连接被关闭并且页面被 'refreshed'。
出于某种原因,我的更新语句出现语法错误,但我不知道为什么。我检查了订单table中Number字段的数据类型,Relations table中的Relationnumber和bookings table中的Order字段的数据类型,它们都是[=70=类型].
我也尝试直接在更新语句中使用一组数字而不是 ordernumber_update var 进行更新(像这样:sSQL3="UPDATE Bookings SET Order=6477 WHERE ID=" & request("ID")
)但是这给出了同样的错误..
注意数据库管理系统的保留字。
这里你用的是Order
,是保留的
因此,如果您使用 MySQL,请使用此选项:
sSQL3="UPDATE Bookings SET `Order`=" & Ordernumber_update & " WHERE ID=" & request("ID") &";"
或者在 SQL 服务器的情况下:
sSQL3="UPDATE Bookings SET [Order]=" & Ordernumber_update & " WHERE ID=" & request("ID") &";"
希望这对其他人也有帮助。谢谢。
三件事:
- 了解 Sql 注射
要调试 sql 语句 "live",请使用
sSQL3="UPDATE Bookings ... Response.Write(sSQL3) 'con.execute(sSQL3) -- comment it out
运行 页面,测试结果 sql 查询数据库
如果 ID 具有字符串数据类型(char、varchar 等),那么您应该使用“...”引用它的值
P.S.
使用[Order]处理保留字
在 [Order] 周围使用方括号,而不是单引号。并且不要为您的字段名称使用保留字。只是在说。