繁体   English   中英

调用存储过程,返回值,经典ASP我缺少什么?

[英]Calling stored procedure, returning value, classic ASP what am I missing?

我的存储过程:

CREATE PROCEDURE [dbo].[uspUserIsInGroup]
@username varchar(30),
@groupname varchar(30),
@ReturnCount int OUTPUT
    AS
    BEGIN
  SET NOCOUNT ON;

      SELECT @ReturnCount = count(*)
      FROM sys.database_role_members AS m
      INNER JOIN sys.database_principals AS dp
         ON m.member_principal_id = dp.principal_id
      INNER JOIN sys.server_principals AS l
         ON dp.[sid] = l.[sid]
      INNER JOIN sys.database_principals AS r
         ON m.role_principal_id = r.principal_id
      WHERE 1=1
      AND l.name = @username
      AND r.name = @groupname
  END

我的asp代码:

 Set cn = CreateObject("ADODB.Connection")
 Set cmd = CreateObject("ADODB.Command")
 cn.Open db
 Set cmd.ActiveConnection = cn
 cmd.CommandText = "uspUserIsInGroup"
 cmd.CommandType = 4 '4=adCmdStoredProc

 cmd.Parameters.Append cmd.CreateParameter("@username", 203, 1, 100, "peds\pss_admin")
 cmd.Parameters.Append cmd.CreateParameter("@groupname", 203, 1, 100, "rolePSS_admin")
 cmd.Parameters.Append cmd.CreateParameter("@ReturnCount", 200, 2, 255)
 cmd.Execute
 response.write "value returned is: " & cmd.Parameters(2).Value & "<br />"

我试过了:

 response.write "value returned is: " & cmd.Parameters(2).Value & "<br />"
 response.write "value returned is: " & cmd.Parameters(2) & "<br />"
 response.write "value returned is: " & cmd.Parameters("@ReturnCount").Value & "<br />"
 response.write "value returned is: " & cmd.Parameters("@ReturnCount") & "<br />"

我尝试过使用“ @”,而没有使用。 我已经检查了权限。 在通话情况下,我得到“ 0”,但该值应为1。

在SQL上运行跟踪,这是正在运行的:

declare @p3 int
set @p3=0
exec uspUserIsInGroup N'peds\pss_admin',N'rolePSS_admin',@p3 output
select @p3

的确给出1的结果。

在此处输入图片说明

我做错了什么,我想念什么? 当我从Trace运行代码时,结果有“((无列名)”),这与事实有什么关系吗?

谢谢!

如评论中所述,查询结果可以根据登录用户的权限进行更改。

如果您不想直接授予asp帐户所需的权限,则可以使用过程签名

sys.database_principals状态

任何用户都可以看到自己的用户名,系统用户和固定的数据库角色。 要查看其他用户,需要ALTER ANY USER或该用户的权限。 要查看用户定义的角色,需要具有ALTER ANY ROLE或角色成员身份。

sys.database_role_members状态

任何用户都可以查看自己的角色成员身份。 要查看其他角色成员身份,需要具有db_securityadmin固定数据库角色的成员身份或数据库上的VIEW DEFINITION。

sys.server_principals状态

任何登录名都可以看到他们自己的登录名,系统登录名和固定服务器角色。 要查看其他登录名,需要ALTER ANY LOGIN或该登录名的权限。 要查看用户定义的服务器角色,需要具有ALTER ANY SERVER ROLE或角色成员身份。

cmd.Parameters.Append cmd.CreateParameter(“ @ username”,203,1,100,“ peds \\ pss_admin”)cmd.Parameters.Append cmd.CreateParameter(“ @ groupname”,203,1,100,“ rolePSS_admin”) cmd.Parameters.Append cmd.CreateParameter(“ @ ReturnCount”,200,2,255)

-应该-

cmd.Parameters.Append cmd.CreateParameter("@username", adVarChar, adParamInput, 30, "peds\pss_admin")
cmd.Parameters.Append cmd.CreateParameter("@groupname", adVarChar, adParamInput, 30, "rolePSS_admin")
cmd.Parameters.Append cmd.CreateParameter("@ReturnCount",adInteger,adParamOutput)

其中adInteger = 3,adParamOutput = 2,adVarChar = 200

因此,使用硬编码数字的语句输出参数应为:

cmd.Parameters.Append cmd.CreateParameter("@ReturnCount", 3, 2)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM