2013-08-21 48 views
1

我得到了這個SqlCommandSum all payments for client,但問題是沒有付款的結果是null或0 - 我不確定。但是我仍然收到同樣的異常:對象不能從dbnull轉換爲其他類型SqlCommand結果 - 對象無法從dbnull轉換爲其他類型

什麼異常或者語句是否可以修復它?

private void select_payments() 
    { 

     try 
     { 

      SqlCommand sc = new SqlCommand("SELECT SUM(payment) AS sumpayment FROM clientpayments WHERE subkey='" + selectid + "' AND year='" + selectedyear+ "'", con); 

      con.Open(); 
      int result = Convert.ToInt32(sc.ExecuteScalar()); 
      con.Close(); 

      if (result != 0) 
      { 
       Convert.ToDecimal(textBox20.Text = result .ToString().Replace(',', '.')); 
      } 
     } 

     catch (Exception ex) 
     { 
      MessageBox.Show(" " + ex.Message.ToString()); 

     } 
    } 

我仍然收到此異常:

對象不能從DBNull的被轉換爲其他類型

我知道,這是低質量的問題,但我不當然我該如何解決這個問題。

謝謝你的時間和答案。

回答

5

您有兩種選擇。修復您的SQL語句或您的轉換。

SQL - 環繞你SUMISNULL

SELECT ISNULL(SUM(payment), 0) 

轉換 - 比較它DBNull.Value第一:

var result = sc.ExecuteScalar(); 
int intResult = result == DBNull.Value ? 0 : Convert.ToInt32(result); 
+0

也許SELECT SUM(ISNULL (payment,0))...支付可能應該允許定義任何方式NULL。 – rheitzman

2
object o = sc.ExecuteScalar(); 
con.Close(); 
if (o != null) 
{ 
    int result = (int) o; 
    if(result != 0) Convert.ToDecimal(textBox20.Text = result .ToString().Replace(',', '.')); 
} 
+0

豈不O ='DBNull.Value',而不是空。因此導致相同的錯誤? – Khan

+0

@JefferyKhan如果結果集爲空,則返回null。 MSDN頁面說**返回值:結果集中第一行的第一列,或者如果結果集爲空,則爲空引用(在Visual Basic中爲Nothing)...... ** ** –

相關問題