2014-01-08 56 views
3

我有一個簡單的查詢,它滿足條件時從SQL數據庫中的表中的列。SqlDataReader和SqlCommand使用SUM()

decimal stock = 0; 

SqlCommand cmd = new SqlCommand(); 
SqlDataReader myRdr; 
cmd.Connection = connection; 
cmd.CommandText = "SELECT SUM(stock) AS stock FROM table WHERE [email protected] AND [email protected]"; 
cmd.CommandType = CommandType.Text; 
cmd.Parameters.Add("@id", SqlDbType.NVarChar, 15).Value = id; 
cmd.Parameters.Add("@condition", SqlDbType.NVarChar, 15).Value = condition; 

connection.Open(); 
myRdr = cmd.ExecuteReader(); 
if (myRdr.HasRows) 
{ 
    myRdr.Read(); 
    stock += Convert.ToDecimal(myRdr1["stock"]); 
} 

myRdr1.Close(); 
cmd1.Dispose(); 
connection.Close(); 

如果表中符合條件的條目正常工作,它會正常工作。如果沒有條目,它會拋出一個異常,說我嘗試將DBNull類型轉換爲十進制,這是不可能的。我試過這樣:

if (myRdr.HasRows) 
{ 
    myRdr.Read(); 
    if (myRdr["stock"] != null) 
    { 
     stock += Convert.ToDecimal(myRdr1["stock"]); 
    } 
} 

但它仍然會引發異常。感謝您的幫助。

回答

3

myRdr1["stock"]正在返回一個DBNull,因此檢查而不是null

if (myRdr1["stock"] != DBNull) 
{ 
    stock += Convert.ToDecimal(myRdr1["stock"]); 
} 
+1

你總是可以嵌入SUM(股票)在COALESCE:COALESCE(SUM(股票) 0)這樣它將返回0,那麼就沒有股票了。 –

+0

確實,最好在客戶端和服務器上安裝修復程序,儘管 –