2011-04-02 60 views
2

這已被竊聽我在過去的幾個小時,我似乎無法找到答案..C#SqlDataReader的只返回值> 0

我有以下查詢

SELECT  A, SUM(B) AS total 
FROM   table 
GROUP BY  A 

現在B列在表中只能容納0或1 A是共1頁,共2筆或共3

現在,當我使用這個直接在SQL數據庫中,我得到一個不錯的表格保存

A  total 
total1 1 
total2 0 
toatl3 5 

這正是我想要它做的。 但是,如果在我的C#程序中使用。如果其中一個總數爲0,則根本不顯示。 下面是我正在使用的代碼,但只有當total1,total2和total3大於0時,它才能正常工作0 因此上表只會顯示total1和total3 ...

string total = "A  total";  
SqlConnection conn = new SqlConnection("connection string goes here I know"); 
try 
{ 
    conn.Open(); 
    SqlCommand total = new SqlCommand(
     "SELECT A, SUM(B) AS total FROM table GROUP BY A", conn); 

    SqlDataReader total_reader = total.ExecuteReader(); 
    while (total_reader.Read()) 
    { 
     total += total_reader["A"].ToString() + " " + total_reader["total"] + "\n"; 
    } 
} 
catch (Exception err) 
{ 
    serverstats += err.ToString(); 
} 
finally 
{ 
    conn.Close(); 
} 

我怎樣才能讓這個它會正確顯示錶,即使共1頁,共2條和共3 0

從而顯示:

A  total 
total1 0 
total2 0 
toatl3 0 

我知道, SQL中的0通常等於null等等。

我懷疑這就是C#假定如果該值爲0表示不感興趣的原因。

我希望我解釋得很好,謝謝任何幫助!

=======編輯======

COALESCE或ISNULL不有所作爲:(

我想這是在SQL與C#的讀者有點不查詢一下。

正如你可以在我的例子中看到的SQL絲毫創建一個表正確的行和他們不寫爲NULL。但C#位似乎它讀成空。

+0

我懷疑這將解決這個問題,但你嘗試過呼籲total_reader [「總」]的ToString()? – SquidScareMe 2011-04-02 02:50:23

+0

@SquidScareMe'ToString()'已經被自動調用。 – 2011-04-02 03:00:34

+0

什麼數據類型是B?這是否有點領域? – Naraen 2011-04-02 03:13:10

回答

2

如果列B可能有空值,請嘗試

SELECT  A, COALESCE(SUM(B),0) AS total 
FROM   table 
GROUP BY  A 
+0

你不應該總結(coalesce(b,0))嗎? – JoshRoss 2011-04-02 03:30:19

+0

@JoshRoss退房http://talideon.com/weblog/2007/09/sum-coalesce.cfm – 2011-04-02 03:34:15

+0

謝謝,但我確實已經嘗試過。以及ISNULL ..我的猜測是C#SqlDataReader位是爲了讀0作爲NULL路 – Raskaroth 2011-04-02 10:21:39

1

您正在使用哪個sql數據庫? SQL服務器或MySQL?

或嘗試編輯該行:

total += total_reader["A"].ToString() + " " + total_reader["total"] + "\n";

total += total_reader["A"].ToString() + " " + int.Parse(total_reader["total"].ToString()) + "\n";

0

好的結果是我不得不WHERE(B = 1)

忘了取這出了我的SQL查詢..

感謝您的幫助:)