Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ExecuteScalar(), почему COUNT мне не возвращает "ноль" 
V
    Опции темы
Banderos
Дата 14.4.2011, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 21.3.2011

Репутация: нет
Всего: нет



Здравствуйте!

Я написал запрос вот такого типа:

Код

OdbcCommand cmd = new OdbcCommand("SELECT COUNT(*) FROM table WHERE country='"+country+"'", connection);


Теперь хочу узнать сколько записей удовлетворяет запросу:
Код

int kol= (int)cmd.ExecuteScalar();


Так вот, когда хоть 1 запись удовлетворяет запросу, то все отлично работает, а вот если БД нет строк, удовлетворяющих запросу, то начинаются ошибки и студия ругается.
Как быть??? Разве, если COUNT = 0, т.е. нет ни 1 записи, то почему не происходит преобразование к (int) нуля и kol не становится равным 0.

Заранее спасибо!
PM MAIL   Вверх
Voyager
Дата 15.4.2011, 01:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 532
Регистрация: 8.2.2005

Репутация: нет
Всего: 18



Потому что видимо возвращать нечего. Как решить:
1. Проверять что возвращает cmd.ExecuteScalar(), если null, значит нет записей.
object obj = cmd.ExecuteScalar();
int kol= obj != null ? (int)obj : 0;
либо
int kol= Convert.ToInt32(cmd.ExecuteScalar());
2. Использовать DbDataReader и проверять что он возвращает
reader = cmd.ExecuteReader()
reader.Read
PM   Вверх
Banderos
Дата 15.4.2011, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 21.3.2011

Репутация: нет
Всего: нет



Voyager, Спасибо!

Вот так вот:
Код

int kol= Convert.ToInt32(cmd.ExecuteScalar());

работает даже, когда результат запроса равен нулю.

а вот так вот, не хотело работать:
Код

int kol= obj != null ? (int)obj : 0;


Это сообщение отредактировал(а) Banderos - 15.4.2011, 10:37
PM MAIL   Вверх
jonie
Дата 15.4.2011, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 8
Всего: 118



Banderos, потому что возращается не null, а DBNull.Value


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Базы данных под .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0820 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.