ASP经典SQL查询错误消息 - 无效的数字

时间:2013-08-30 01:07:29

标签: sql asp-classic oracle12c

我在ASP Classic中使用SQL获得了一个查询,我得到的语法如下所示:

    mQry = "SELECT name FROM finals WHERE invoice_num = " &request.querystring("num") & " AND name LIKE '&" & request.querystring("nam") & "%'"
    response.write("Operating Unit")
    for each x in TestRally.fields
    response.write(": ")
    response.write(x.value)  '-- got error in this area...
    response.write("<br>")
    next
    response.write("<br>")
    TestRally.MoveNext

基于上面提到的语法,对此最好的补救办法是什么.. ???

到目前为止我收到的错误信息是:

  

Microsoft OLE DB Provider for Oracle错误'80040e07'ORA-01722:   无效的号码

4 个答案:

答案 0 :(得分:2)

您的代码对SQL注入攻击持开放态度,这部分是导致问题的原因:您没有验证(更不用说清理)用于制定查询的输入。

在继续之前请先查看此质量检查:What is SQL injection?

我们无法告诉您如何在不知道您使用的DBMS的情况下如何正确解决问题,但快速解决方法是:

Dim invoiceNum
invoiceNum = CInt( Request.QueryString("num") )
Dim name
name = Request.QueryString("nam")
name = Replace( name, "'", "''" )

Dim sql
sql = "SELECT name FROM finals WHERE invoice_num = " & invoiceNum & " AND name LIKE '&" & name & "%'"

答案 1 :(得分:0)

invoiceNum = CInt( Request.QueryString("num") ) 

可能导致溢出。

您传递的发票号对于整数来说太大了。将发票号码保存为字符串。

使用戴的代码,试试这个:

Dim invoiceNum
invoiceNum = Request.QueryString("num")
invoiceNum = Replace( invoiceNum, "'", "''")

Dim name
name = Request.QueryString("nam")
name = Replace( name, "'", "''" )

sql = "EXEC sp_executesql N'SELECT name FROM finals WHERE invoice_num = @invoice_num AND name LIKE ''&'' + @name + ''%'''"
sql = sql & ",N'@invoice_num varchar(20),@name varchar(255)',@invoice_num = '" & invoiceNum & "',@name = '" & name & "'"

答案 2 :(得分:0)

在执行上述语句之前启用sql跟踪或更好的10046跟踪,您将看到为invoice_num传入了哪个值。这将创建一个跟踪文件,详细说明所有语句及其执行方式。

另外发布表的定义方式。

答案 3 :(得分:0)

“SELECT name FROM finals WHERE invoice_num ='”&amp; request.querystring(“num”)&amp; “'和名字='”&amp; request.querystring(“nam”)&amp; “'”

这是ASP Classic中查询的正确SQL语法,而不是我在问题中提到的上述SQL查询。

相关问题