C # SqlDataReader только возвращает значения> 0 - PullRequest
2 голосов
/ 02 апреля 2011

Это беспокоило меня последние несколько часов, и я не могу найти ответ ..

У меня есть следующий запрос

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

Я знаю, что 0 в SQL обычно равен нулю и тому подобное.

Я подозреваю, что это причина того, что C # предполагает, что если значение равно 0, то оно не представляет интереса.

Я надеюсь, что объяснил это достаточно правильно, спасибо за любую помощь заранее!

======= РЕДАКТИРОВАТЬ ======

COALESCE или ISNULL не имеет значения:(

Я предполагаю, что это связано с битом чтения C #, а не с битом запросов SQL.

Как вы можете видеть в моем примере, бит SQL создает таблицу с правильными строками и выполняетне записывать их как NULL. Но бит C #, кажется, читает его как NULL.

Ответы [ 3 ]

2 голосов
/ 02 апреля 2011

Если столбец B может содержать нули, попробуйте

SELECT        A, COALESCE(SUM(B),0) AS total
FROM          table
GROUP BY      A
1 голос
/ 02 апреля 2011

какую базу данных 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";

0 голосов
/ 02 апреля 2011

Хорошо, получается, что у меня ГДЕ (B = 1)

Я забыл убрать это из моего SQL-запроса ..

Спасибо за помощь:)

...