【问题标题】:C# SqlDataReader only returns values > 0C# SqlDataReader 只返回值 > 0
【发布时间】:2011-04-02 02:13:30
【问题描述】:

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

我有以下问题

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 则不感兴趣的原因。

我希望我解释得足够正确,提前感谢您的帮助!

=======编辑======

COALESCE 或 ISNULL 没有区别 :(

我认为这与 C# 阅读器位有关,而不是 SQL 查询位。

正如您在我的示例中看到的那样,SQL 位确实创建了一个具有正确行的表,并且不会将它们写为 NULL。但 C# 位似乎将其读取为 NULL。

【问题讨论】:

  • 我怀疑这会解决问题,但您是否尝试过在 total_reader["total"] 上调用 ToString()?
  • @SquidScareMe ToString() 已被自动调用。
  • B 是什么数据类型?是位域吗?
  • 请不要捕获 System.Exception

标签: c# sqldatareader


【解决方案1】:

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

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

【讨论】:

  • 你不应该 sum(coalesce(b,0)) 吗?
  • 谢谢,但我已经尝试过了。以及 ISNULL .. 我的猜测是 C# SqlDataReader 位应该归咎于将 0 读取为 NULL 路
【解决方案2】:

您使用的是哪个 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";

【讨论】:

    【解决方案3】:

    好吧,原来我有 WHERE (B = 1)

    我忘了把这个从我的 SQL 查询中去掉。。

    感谢您的帮助:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多