Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Базы данных под .NET > ExecuteScalar()


Автор: Banderos 14.4.2011, 17:57
Здравствуйте!

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

Код

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


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

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


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

Заранее спасибо!

Автор: Voyager 15.4.2011, 01:12
Потому что видимо возвращать нечего. Как решить:
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

Автор: Banderos 15.4.2011, 10:36
Voyager, Спасибо!

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

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

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

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

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

Автор: jonie 15.4.2011, 14:00
Banderos, потому что возращается не null, а DBNull.Value

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)