我已經做了一些研究,然後發佈這個問題,我意識到這樣的事實,當沒有數據返回時,ExecuteScalar會拋出一個System.NullReferenceException。這就是爲什麼我修改我的存儲過程到「返回1」,所以保證了返回值。不過,我仍然得到NULL引用異常。ExecuteScalar拋出NullReferenceException當調用一個存儲過程,返回1
於是,我就使用SqlCommand查詢有數據表:
SqlCommand sqlCommand = new SqlCommand("SELECT * FROM ATableThatHasValues", conn)
當我跑了執行標我是能夠拿起一個值,所以我知道我有權限查詢數據庫。我懷疑這是我錯過的一些特定的存儲過程權限設置?
我真的很感激任何意見/建議,因爲我一直堅持這一天了一天。 :(
我的代碼如下所示:
using (SqlConnection sqlConnection = new SqlConnection(connectionString))
{
sqlConnection.Open();
using (SqlCommand sqlCommand = new SqlCommand("GetSomeValue", sqlConnection))
{
sqlCommand.CommandType = CommandType.StoredProcedure;
//sqlCommand.Parameters.Add(new SqlParameter("@Id", this.ID));
//sqlCommand.Parameters.Add(new SqlParameter("@State", 1 /* active */));
byte retValue = (byte)sqlCommand.ExecuteScalar();
return retValue;
}
}
THANKS
哪一行會引發懷疑?堆棧跟蹤在哪裏? – asawyer
你確實理解了'ExecuteScalar'的目的,對吧?它返回第一行數據的第一列,其他所有內容都被忽略。是否有一個原因,你使用它與'SELECT *'一起使用? –