Sql 在我的登录页面的vbscript中使用参数化查询时,recordset.eof下未显示值
我正在为我的经典asp sitevbscript创建一个登录验证页。为了防止我的页面被SQL注入,我在页面中使用了参数化查询,但如果不是Recordset.EOF行,在写入之后我无法检索值。值没有传递。请帮我解决这个问题。我的代码如下Sql 在我的登录页面的vbscript中使用参数化查询时,recordset.eof下未显示值,sql,sql-server-2005,vbscript,asp-classic,parameterized,Sql,Sql Server 2005,Vbscript,Asp Classic,Parameterized,我正在为我的经典asp sitevbscript创建一个登录验证页。为了防止我的页面被SQL注入,我在页面中使用了参数化查询,但如果不是Recordset.EOF行,在写入之后我无法检索值。值没有传递。请帮我解决这个问题。我的代码如下 从您当前的代码中可以看出,您有两个问题: 如果objRS.EOF为True和objRS.BOF为True,则会出现这种情况,此时将排除打印第一条和最后一条记录。我不知道为什么需要这样做,但因为您没有迭代记录集中的所有元素。你永远不会看到任何记录被打印出来 要解决问
从您当前的代码中可以看出,您有两个问题: 如果objRS.EOF为True和objRS.BOF为True,则会出现这种情况,此时将排除打印第一条和最后一条记录。我不知道为什么需要这样做,但因为您没有迭代记录集中的所有元素。你永远不会看到任何记录被打印出来 要解决问题1,需要将所有代码包含在、while、do while的循环中,并在recordset对象中使用objRS.MoveNext函数来读取查询中获得的所有记录 这就是我在这有限的背景下看到的所有问题。我希望这有帮助 更多信息: 编辑:看到代码中OP的编辑,以及我认为他想要实现的目标,我建议改为使用以下代码:
'Do While Not objRS.EOF'
'if Objrs("Ausr") = objCmd.Parameters("param1") then'
'response.Write(Objrs("Ausr"))'
'end if'
'objRS.MoveNext'
'Loop'
If Not objRS.EOF Then
response.write("Granted access to the user:" & StrUserName)
End if
我假设您希望检查是否有单个用户登录。Debug;检查是否正在将值传递给参数。打印出值并查看
Response.write "StrUserName ="& StrUserName &"<br/>"
Response.write "StrPassword ="& StrPassword &"<br/>"
set objRS = objCmd.execute
实际上,在仔细查看代码之后,有一些问题 起初没有注意到这一点,但看起来好像您没有正确设置值,有两种方法可以做到这一点 在CreateParameter方法中指定它们 Call.Parameters.Append.CreateParameterparam1,adVarChar,adParamInput,50,StrUserName Call.Parameters.Append.CreateParameterparam2,adVarChar,adParamInput,50,StrPassword 在创建参数后指定 Call.Parameters.Append.CreateParameterparam1,adVarChar,adParamInput,50 Call.Parameters.Append.CreateParameterparam2,adVarChar,adParamInput,50 .parameters sparam1.Value=StrUserName .参数sparam2.Value=StrPassword 这会将您的参数对象设置为字符串,而不会给出预期的结果 试试看 有用的链接 -演示如何使用ADODB.Command并返回ADODB.Recordset并将其转换为数组。
我试过使用循环,但问题仍然是一样的,它并没有传递参数。请帮忙me@lokeshpurohit使用您在代码中所做的新更改编辑您的问题。如果ObjrsAusr=objCmd.parameters sparam1,则执行而不执行objRS.EOF,如果objRS.MoveNext,则执行response.WriteObjrsAusrLoop@lokeshpurohit您的questionthrough recordsetobjrs参数化方法没有按照上面main中显示的代码执行问题代码很好,您确定查询是正确的吗?从管理员中选择*其中Ausr=?和Apwd=?表admin是否包含相关数据?@Lankymart,是的,查询可以,并且也有相关数据。如果我在不创建参数的情况下传递值,则其工作正常。但使用参数化查询时,它不会在eof命令行之后传递值。根据您的调整了我的答案。您的问题已解决?如果我在objcmd.execute命令行之后传递,它将检索值。好的。我只是想看看。如图所示,您可以在创建参数期间传入值吗?如果我在objcmd.execute命令行之后传入值,它将检索值,并且我能够获得在创建参数时传入的值,如:-objcmd.Parametersparam2。但我无法在EOF命令下检索值。@Lankymart,是的,问题已经解决。问题在于加密的密码值。现在它的工作发现。我非常感谢你们的支持和指导。我也想感谢这个网站。@lokeshpurohit这就是我所说的,你在描述这个问题时没有提到加密。只要提到这一点,我和其他人就会省下很多试图帮助你的无意义的工作。
Set objParam1 = objCmd.CreateParameter("param1", adVarChar, adParamInput, len(StrUserName), StrUserName)