Это беспокоило меня в течение последних нескольких часов, и я не могу найти ответ.
У меня есть следующий запрос
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
Это именно то, что я хочу сделать. Однако при использовании в моей программе С#. если один из итогов равен 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
Я знаю, что 0 в SQL обычно равно нулю и тому подобное.
Я подозреваю, что это причина того, что C# предполагает, что если значение равно 0, оно не представляет интереса.
Надеюсь, я объяснил это достаточно правильно, спасибо за любую помощь заранее!
======= РЕДАКТИРОВАТЬ ======
COALESCE или ISNULL не имеет значения :(
Я предполагаю, что это связано с битом чтения С#, а не с битом запроса SQL.
Как вы можете видеть в моем примере, бит SQL создает таблицу с правильными строками и не записывает их как NULL. Но бит С#, похоже, читает его как NULL.
ToString()
уже вызывается автоматически. - person OJ.   schedule 02.04.2011