2015-11-06 4 views
2

Я пытаюсь выполнить запрос на C#, который суммирует количество просмотров пользователя. Мне возвращается значение NULL. Использование того же оператора в Server Management Studio дает мне правильный результат.Запрос, возвращающий значение NULL

вот мой код:

public static int Count_views(string username) 
{ 
    int views = 0; 
    StringBuilder query = new StringBuilder(); 
    query.Append("SELECT Sum(views) FROM videos WHERE username = @username"); 

    using (SqlConnection con = new SqlConnection(Config.ConnectionString)) 
    { 
     con.Open(); 

     using (SqlCommand cmd = new SqlCommand(query.ToString(), con)) 
     { 
      cmd.CommandType = CommandType.Text; 
      cmd.Parameters.Add(new SqlParameter("@username", username)); 

      views = Convert.ToInt32(cmd.ExecuteScalar()); 
     } 
    } 

    return views; 
} 

Я отлажена код и параметры являются правильными. Я получаю эту ошибку:

System.InvalidCastException: Object cannot be cast from DBNull to other types. 

, что означает, что я получаю нулевое значение взамен.

ConnectionString в порядке. Каждая другая функция работает отлично, за исключением этого. может ли кто-нибудь сказать мне, что может я здесь проблема?

Edit:

Ниже приведены скриншоты, что я встречая. Первый снимок экрана показывает, что значение «Администратор» передается внутри функции. второй снимок экрана показывает, что это значение также находится в базе данных. enter image description here

enter image description here

+0

Вместо этого вы хотите вернуть 0? http://stackoverflow.com/questions/17048343/my-select-sum-query-returns-null-it-should-return-0 – robaudas

+0

@robaudas Он должен суммировать значения в столбце и возвращать результат. Сумма значений не равна 0, но она дает мне NULL –

+0

ли столбец имени пользователя в таблице видео разрешает null? – Adish

ответ

3

Вы можете изменить SUM запрос возвращает 0 вместо NULL:

query.Append("SELECT COALESCE(Sum(views),0) FROM videos WHERE username = @username"); 

Вы также можете использовать оператор as, чтобы бросить его в нужное обнуляемого типа:

int? views = cmd.ExecuteScalar() as int?; 
+1

Но результат не 0. Почему он дает мне NULL? –

+1

@AhmedMujtaba: у вас есть имя пользователя, которое не существует. Тогда вы получите 'NULL' как результат с' SUM' (в отличие от 'SELECT COUNT (views) ...'). Используйте отладчик, проверьте значение, переданное параметру. Скопируйте его в ssms и посмотрите, что вы получаете. –

+0

Пожалуйста, взгляните на редактирование. Я включил скриншоты –

Смежные вопросы