2016-11-24 31 views
1

返回值中的錯誤我試圖在一個int變量中得到sql查詢的結果,但我得到了對象null引用錯誤。請有人指導我。ExecuteScalar()

oconn = new SqlConnection(oSession.CONNECTION_STRING); 
oconn.Open(); 

objCmd.CommandText = "select Rule_Approval_Selection from UserFile where uid=" + intUserID; 
int value = (Int32)(objCmd.ExecuteScalar()); 
oconn.Close(); 
+2

那麼,什麼是空的,我想'objCmd'或'oSession'。調試器是一個很棒的工具 –

+0

這絕對不是重複的。 'objCmd'和'oSession'都不是'null'。 – dasblinkenlight

+0

@dasblinkenlight:這是一個很好的。你的水晶球告訴你了嗎? –

回答

5
ExecuteScalar()

返回null當命令沒有行。在你的情況下,當intUserId不對應於現有的用戶時,將返回null

切換到int?來處理這個問題:

int? value = (Int32?)(objCmd.ExecuteScalar()); 

現在你的變量時,在數據庫中存在intUserIdvalue將被設置爲non-null;否則,它將是null

+0

[dasblinkenlight](http://stackoverflow.com/users/335858/dasblinkenlight)您是對的,因爲該異常不在'ExecuteScalar()'函數中。在此[MSDN文章](https://msdn.microsoft.com/zh-cn/ com/en-us/library/system.data.sqlclient.sqlcommand.executescalar(v = vs.110).aspx#Exceptions)有一個ExecuteScalar異常列表。 – Yahfoufi

+0

認爲它引起了一個'InvalidCastException',但由於取消裝箱值類型,你會得到一個'NullRefernceException'。它提到[在這裏](https://msdn.microsoft.com/en-us/library/yz2be5wk.aspx):_「試圖unbox'null'會導致一個'NullReferenceException'。嘗試解除對不兼容值的引用類型導致一個'InvalidCastException'。「_ –

0
oconn = new SqlConnection(oSession.CONNECTION_STRING); 
oconn.Open(); 
objCmd.CommandText = "select Rule_Approval_Selection from UserFile where uid="  + intUserID; 
var x=objCmd.ExecuteScallar(); 
if (x!= null && DBNull.Value != x) 
{ 
int value = (Int32)(objCmd.ExecuteScalar()); 
} 

oconn.Close(); 

試試這個...