C#SqlDataReader只返回值> 0

时间:2011-04-02 02:13:30

标签: c# sqldatareader

过去几个小时这一直困扰着我,我似乎无法找到答案..

我有以下查询

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

现在表中的B列只能容纳0或1。 A是total1,total2或total3

现在,当我直接在SQL数据库中使用它时,我得到了一个很好的表格

A        total
total1   1
total2   0
toatl3   5

这正是我想要的。 但是如果在我的c#程序中使用。如果其中一个总数为0则根本不显示.. 下面是我正在使用的代码,但只有当total1,total2和total3大于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();
}

我怎样才能使它正确显示表格,即使total1,total2和total3为0

因此显示:

A        total
total1   0
total2   0
toatl3   0

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

我怀疑这就是C#假设如果值为0而不感兴趣的原因。

我希望我能够正确地解释它,感谢您提前提供任何帮助!

======= EDIT ==

COALESCE或ISNULL没有什么区别:(

我认为它与C#阅读器位不同,不在SQL查询位中。

正如您在我的示例中所看到的,SQL位DOES创建一个具有正确行的表,并且不将它们写为NULL。但是C#位似乎把它读成NULL。

3 个答案:

答案 0 :(得分:2)

如果B列可以有空值,请尝试

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

答案 1 :(得分:1)

你正在使用哪个sql数据库? sql server还是mysql?

或尝试编辑该行:

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

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

答案 2 :(得分:0)

好的,事实证明我有WHERE(B = 1)

我忘了从我的SQL查询中删除它..

感谢您的帮助:)