更新语句ASP Classic中的语法错误

时间:2015-03-04 12:47:22

标签: sql ms-access asp-classic sql-update

我在更新语句的代码中遇到语法错误,在阅读了有关它的多篇帖子后,我无法弄清楚导致错误的原因。

代码如下:

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")

要了解的事项:

  • 请求queriestring来自用户可以在下拉列表中选择客户的表单。请参阅代码:<form name="ChangeCustomer" method="post" action="myPage.asp?action=page&do=customer&ID=<%=rst("ID")%>" style="display:inline">
  • ID中的第一个来自之前的select语句,因为我在其他代码中也以相同的方式使用它(确实有效)。
  • openconn con是一个访问我的数据库的功能(它的工作原理与上面相同)
  • 此代码中的eacht select语句已在response.write中测试其输出。所有结果都是预期结果。

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

  1. 用户在表单中更改客户(使用下拉菜单)并按保存(提交)。
  2. 在提交时,启动了查询字符串,如果代码实际上已经过测试,则会对此进行测试。
  3. 所选客户保存在var New_customer
  4. 使用第一个select语句检索与客户名称匹配的关系编号。
  5. 正确的关系号码被放入var Relationnumber_update
  6. 在第二个查询中,正在搜索的正确数字等于关系数。
  7. a if / then follow确保Relationnumber_update不等于1000(不应对此号码进行更新)
  8. 如果不等于1000,则找到的订单号(第二个选择语句)存储在var ordernumber_update
  9. 更新声明如下:预订表中的订单字段正在使用找到的订单号更新。
  10. 最后(在if之后)关闭连接并且页面正在刷新&#39;。
  11. 对于某些原因,我在更新语句中遇到语法错误,但我不知道为什么。我检查了orders表中Number字段的数据类型,Relations表中的Relationnumber和bookings表中的Order字段,它们都是number / int类型。

    我还尝试直接在update语句中使用set number更新而不是ordernumber_update var(如此:sSQL3="UPDATE Bookings SET Order=6477 WHERE ID=" & request("ID")),但这会产生相同的错误..

3 个答案:

答案 0 :(得分:1)

三件事:

  1. 了解Sql Injections
  2. 要调试sql语句&#34; live&#34;,请使用

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

    运行页面,并测试结果对数据库的SQL查询

  3. 如果ID具有字符串数据类型(char,varchar等),则应使用&#39; ...&#39;

  4. 引用其值

    P.S。

    使用[Order]处理保留字。

答案 1 :(得分:0)

请注意数据库管理系统的保留字。 在这里您使用的是Order,这是一个保留的。

如果您使用 MySQL

,请使用此选项
sSQL3="UPDATE Bookings SET `Order`=" & Ordernumber_update & " WHERE ID=" & request("ID") &";"

或者 SQL Server

sSQL3="UPDATE Bookings SET [Order]=" & Ordernumber_update & " WHERE ID=" & request("ID") &";"

希望这也有助于其他人。谢谢。

答案 2 :(得分:-1)

在[订单]周围使用括号,而不是单引号。并且不要将保留字用于您的字段名称。 Jus sayin#39;。