Sql server 使用SQL参数返回;参数的类型错误";
我在弄清楚如何编写经典的ASP查询以防止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
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"-->