2011-04-02 59 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查询..

感谢您的帮助:)