更新语句语法错误 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")

要知道的事情:

上面代码中发生的事情的简短描述

  1. 用户在表单中更改客户(使用下拉菜单)并按保存(提交)。
  2. 在提交时启动查询字符串,测试代码是否真正到达这里并且它确实到达了。
  3. 所选客户保存在 var New_customer.
  4. 用第一个 select 语句检索与客户名称匹配的关系编号。
  5. 正在将正确的关系号放入 var Relationnumber_update
  6. 在第二个查询中,正在搜索等于关系编号的正确编号。
  7. A if/then 确保 Relationnumber_update 不等于 1000(不应对此数字进行更新)
  8. 如果它不等于 1000,则找到的订单号(第二个 select 语句)存储在 var ordernumber_update
  9. 更新语句跟在预订 table 中的订单字段正在使用找到的订单号更新的地方。
  10. 最后(在 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") &";"

希望这对其他人也有帮助。谢谢。

三件事:

  1. 了解 Sql 注射
  2. 要调试 sql 语句 "live",请使用

    sSQL3="UPDATE Bookings ...
    Response.Write(sSQL3)
    'con.execute(sSQL3) -- comment it out
    

    运行 页面,测试结果 sql 查询数据库

  3. 如果 ID 具有字符串数据类型(char、varchar 等),那么您应该使用“...”引用它的值

P.S.

使用[Order]处理保留字

在 [Order] 周围使用方括号,而不是单引号。并且不要为您的字段名称使用保留字。只是在说。