2012-02-09 45 views
-2

我想從數據庫中獲取列的總和,但查詢返回-1。我有這個疑問:在WinForms中獲取列的總和

SELECT SUM(total) 
FROM bon 
WHERE   
    (DATEPART(dd, data_adaugare) = DATEPART(dd, @p1)) 
    AND (DATEPART(mm, data_adaugare) = DATEPART(mm, @p1)) 
    AND (DATEPART(yy, data_adaugare) = DATEPART(yy, @p1)) 

和C#代碼:

decimal sumaa = 0; 
DataTable suma = bonTableAdapter.Suma(DateTime.Now); 

foreach (DataRow r in suma.Rows) 
{ 
    sumaa += Convert.ToDecimal(r.ItemArray[0]); 
} 
+0

如果你改變你的查詢'選擇total'而不是'選擇總和(總)',並在你的DBMS運行它,你看到了什麼結果呢? – 2012-02-09 08:13:43

+0

我不明白!爲什麼人們會投反對票? – 2012-02-09 09:03:13

回答

1

總列可能爲空。在這種情況下,使用這個。

SELECT SUM(isnull(total, 0))... 
+0

正確的語法是ISNULL(SUM(total),0)但它仍然不是想要的結果。 sumaa等於-1 ... – 2012-02-09 07:49:28

+2

@EmilDumbazu:不,請閱讀答案。 Mujtaba Hassan建議的語法將爲您提供更好的答案。你的語法檢查SUM的整個結果是否爲NULL(它不會);他的版本只總結非空元素。 – 2012-02-09 07:57:32

+0

(並且認真地,嘗試閱讀一個答案並理解它,而不是改變它,然後說這是錯誤的。人們試圖在這裏幫助你!) – 2012-02-09 07:58:33

2

你錯過任何記錄一個+

decimal sumaa = 0; 
    DataTable suma = bonTableAdapter.Suma(DateTime.Now); 
    foreach (DataRow r in suma.Rows) 
    { 
     sumaa += Convert.ToDecimal(r.ItemArray[0]); 
    } 
+0

是的,這是在這裏發佈代碼的問題,但這根本不是問題。 – 2012-02-09 07:43:58

+0

@EmilDumbazu ofcourse它是。沒有'+'他沒有總結任何東西。 – Shai 2012-02-09 07:45:17

+0

也許我的評論中沒有最好的陳述,但是+存在於我的代碼中! – 2012-02-09 07:52:13