从proc中返回一个位值? NullReference异常被抓住了吗?

时间:2012-07-02 06:38:07

标签: c# sql-server

我正在测试连接字符串用户ID是否为sys Admin。

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

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

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异常。 对象引用未设置为对象的实例。

2 个答案:

答案 0 :(得分:2)

您错过了ExecuteXXXXX()方法。

 con.Open();      
 cmd1.ExecuteNonQuery(); // cmd1.ExecuteScalar();
 con.Close(); 

答案 1 :(得分:0)

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