Sql server 使用SQL参数返回;参数的类型错误";

Sql server 使用SQL参数返回;参数的类型错误";,sql-server,asp-classic,Sql Server,Asp Classic,我在弄清楚如何编写经典的ASP查询以防止SQL注入时遇到了一些问题 我读了一些关于它的帖子,并想出了以下脚本 set cmd=server.createobject(“ADODB.Command”) SQL=“从tablename中选择*,其中电子邮件类似?且已删除=0” cmd.ActiveConnection=conn cmd.CommandText=qText cmd.CommandType=adCmdText cmd.CommandTimeout=900 cmd.Parameters.A

我在弄清楚如何编写经典的ASP查询以防止SQL注入时遇到了一些问题

我读了一些关于它的帖子,并想出了以下脚本

set cmd=server.createobject(“ADODB.Command”)
SQL=“从tablename中选择*,其中电子邮件类似?且已删除=0”
cmd.ActiveConnection=conn
cmd.CommandText=qText
cmd.CommandType=adCmdText
cmd.CommandTimeout=900
cmd.Parameters.Append cmd.CreateParameter(“@name”,adVarchar,adParamInput,50,“%”和this.Form(“email”)和“%”)
设置rs=cmd.Execute
但每次我运行它时,都会出现以下错误:

ADODB.Command error '800a0bb9'
Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another.
我已经按照这里的指示做了


如果您能提供任何帮助,我们将不胜感激。

adVarchar
adCmdText
adParamInput
都是常量值,需要在使用它们之前进行定义。有多种方法可以做到这一点:

  • 仅定义手动所需的常量:

    const adVarChar = 200
    const adParamInput = &H0001
    const adCmdText = &H0001
    
  • 直接使用这些值(可读性/可维护性较差,通常不建议使用):

  • 包含一个
    adovbs.inc
    ,它在一个方便的包含文件中定义了所有ADO常量:

     <!--#include virtual="/adovbs.inc"-->
    

  • 是否包含ADO常量定义?(即adovbs.inc)@Diado不,老实说,我不确定那是什么,我在做的同时努力学习。我可以将SQL语句更改为存储过程吗?
    SQL=“Select*From tablename Where Email Like@name And Deleted=0”
    -更改SQL是否有帮助?cmd.CommandText=qText可能重复这是现在似乎出错的行您正在将查询文本存储在名为
    SQL
    的变量中,而不是
    qText
    ,据我所知。因此,您需要
    cmd.CommandText=SQL
    Ok,这一个有效。。。最后一个我保证哈哈哈现在这行是错误的cmd.CommandType=adCmdTxt。。。很抱歉让人恼火,很明显我是新来的。顺便说一句,您可以使用这些常量,而无需在ASP页面中包含对ADODB类型库的引用来手动定义它们。这是使用元数据标记完成的:
    -比较另一个提示-可以从注册表中找到正确的GUID(在
    HKLM\Classes\TypeLib
    中搜索)。
     <!--#include virtual="/adovbs.inc"-->
    
    <!--metadata type="TypeLib" name="Microsoft ActiveX Data Objects 2.8 Library" uuid="{2A75196C-D9EB-4129-B803-931327F72D5C}" version="2.8"-->