SQL: Приведение типов.
это ошибка уже в шарпе возникает. необходимо явно заменять DBNull на null
> а по нажатии OK ещё одну: "There is already an open Datareader associated, which must be closed first." (запрос идёт из C#). Не хватает защиты "от дурака"? И какой?
все ресурсы необходимо оборачивать в using.
ps
вообще используется очень плохой подход для работы с базой.
с базой необходимо работать через linq (а не вручную генерить текстовые запросы) - тогда не будет всех этих проблем
А можно избавиться от ошибки? В одном случае ведь работает нормально... Неужели всё так сложно, и придется запрос, написанный на сервере, переносить в C#?
А что делать с этим самым using?
можно. ничего никуда переносить не надо.
> А что делать с этим самым using?
код покажи
Что же касается второй ошибки, то оберни использование DataReader-а в оператор using вот так:
using(SqlDataReader reader = sqlCommand.ExecuteReader
{
while(reader.Read
// bla-bla-bla
}
using (IDataReader reader = cmd.ExecuteReader
{
//логика чтения reader'а
}
Это гарантирует, что ридер закроется после выполнения логики его чтения.
Чтобы проверить значение на null, надо писать что-то типа того:
string myValue = null;
int index = 0; //номер колонки в выдаче запроса
if (!reader.IsDBNull(index
myValue = reader.GetString(index);
Оставить комментарий
maximovega
Есть две таблички с одинаковыми характеристиками (каждая - всего лишь из двух столбцов: названий параметра и соответствующих численных значений). К ним делается запрос, использующий оператор CAST, и при работе с первой таблицей всё в порядке. При работе со второй выдаёт ошибку "Object cannot be cast from DBNull to other types" (NULL есть в обоих таблицах! а по нажатии OK ещё одну: "There is already an open Datareader associated, which must be closed first." (запрос идёт из C#). Не хватает защиты "от дурака"? И какой?