0

我正在测试连接字符串用户 ID 是否是系统管理员。

但是当我尝试返回位的值时,我的代码会不断中断?

为此,我使用以下存储过程:

ALTER PROCEDURE [dbo].[CheckIfAdmin]
@SQLLoginName nvarchar(50),
@IsAdmin bit OUTPUT

As

SET @IsAdmin = IS_SRVROLEMEMBER('sysadmin', @SQLLoginName)

Print @IsAdmin
Select @IsAdmin

为了检索值,我使用以下 C# 代码:

public bool CheckIfIsAdmin(string procedure, SqlParameter[] parameters)
        {
            try
            {
                SqlCommand cmd1 = new SqlCommand(procedure, con);
                cmd1.CommandType = CommandType.StoredProcedure;
                foreach (SqlParameter p in parameters)
                {
                    cmd1.Parameters.Add(p);
                }
                SqlParameter IsAdmin = new SqlParameter("@IsAdmin", SqlDbType.Bit);
                IsAdmin.Direction = ParameterDirection.Output;
                cmd1.Parameters.Add(IsAdmin);
                con.Open();      
                con.Close();             
                MessageBox.Show("Is a admin = " + IsAdmin.Value.ToString()); // this should display 1 or 0 
                return ture
            }
            catch (Exception ex)
            {
                MessageBox.Show("" + ex);
                return false;            
            }
        }

错误消息:

NullReference 异常被捕获。你调用的对象是空的。

4

2 回答 2

2

你错过了ExecuteXXXXX() 方法。

 con.Open();      
 cmd1.ExecuteNonQuery(); // cmd1.ExecuteScalar();
 con.Close(); 
于 2012-07-02T06:41:30.973 回答
0

您没有在打开和关闭连接之间执行。

于 2012-07-02T06:41:44.630 回答