【发布时间】: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