Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在我的登录页面的vbscript中使用参数化查询时,recordset.eof下未显示值_Sql_Sql Server 2005_Vbscript_Asp Classic_Parameterized - Fatal编程技术网

Sql 在我的登录页面的vbscript中使用参数化查询时,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,则会出现这种情况,此时将排除打印第一条和最后一条记录。我不知道为什么需要这样做,但因为您没有迭代记录集中的所有元素。你永远不会看到任何记录被打印出来 要解决问

我正在为我的经典asp sitevbscript创建一个登录验证页。为了防止我的页面被SQL注入,我在页面中使用了参数化查询,但如果不是Recordset.EOF行,在写入之后我无法检索值。值没有传递。请帮我解决这个问题。我的代码如下


从您当前的代码中可以看出,您有两个问题:

如果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)