[英]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帐户所需的权限,则可以使用过程签名 。
任何用户都可以看到自己的用户名,系统用户和固定的数据库角色。 要查看其他用户,需要ALTER ANY USER或该用户的权限。 要查看用户定义的角色,需要具有ALTER ANY ROLE或角色成员身份。
任何用户都可以查看自己的角色成员身份。 要查看其他角色成员身份,需要具有db_securityadmin固定数据库角色的成员身份或数据库上的VIEW DEFINITION。
任何登录名都可以看到他们自己的登录名,系统登录名和固定服务器角色。 要查看其他登录名,需要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.