2012-07-02 97 views
0

我正在做一个测试,看看连接字符串的用户ID是否是一个sys Admin。从proc返回一个位值? NullReference异常被捕获?

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

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

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

您错过了ExecuteXXXXX()方法。

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

它现在跳出:cmd1.ExecuteNonQuery();并显示以下消息:无法将参数值从字符串转换为日期时间。 – Pomster

+0

验证SP参数类型。 – adatapost

0

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