2012-07-02 35 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

您沒有在打開和關閉連接之間執行。