powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Проблема с sqlreader
5 сообщений из 5, страница 1 из 1
Проблема с sqlreader
    #38120115
VIT2708
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть например ХР

select
Код: c#
1.
d.id as id

, d.name, t.info From table as d ....

Так вот проблема в том что reader вылетает на чтени столбца id

Код: c#
1.
if (!reader.IsDBNull(reader.GetOrdinal("id"))) { cdr.Id = (string)reader["id"]; }



cdr - это обьект куда считываются данные

Вот сама ошибка Недопустимая попытка чтения при отсутствии данных.

в sql management studio проверял запрос все работает а VS 2010 ругается

Спасибо
...
Рейтинг: 0 / 0
Проблема с sqlreader
    #38120266
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VIT2708,

метод Read() ты не забыл вызвать перед этим?

Не помешает также убедится, что SP возвращает только один результат. В этом случае на закладке Messages будет только одна надпись вида (n row(s) affected). Если их несколько, то а) убери "ненужные" с помощью SET NOCOUNT ON/OFF или б) передвинь SqlDataReader на нужный результат с помощью метода NextResult().

P.S. Код у тебя странный.

1) Ты читаешь значение id колонки, которое, по идее, является числом, но сохраняешь его как строку. Если это так, то зачем ты так делаешь?

2) Для чтения данных лучше использовать методы вида GetString(int), GetInt32(int) чтобы не делать приведений типа и явно деклалировать ожидания насчет типа данных колонки. Да, этим методам нужно передавать индекс колонки что удлиняет код, но никто же не мешает сохранить его в переменную до цикла. То есть вместо
Код: c#
1.
2.
3.
4.
5.
6.
7.
while (reader.Read())
{
	if (!reader.IsDBNull(reader.GetOrdinal("id")))
	{
		cdr.Id = reader.GetString(reader.GetOrdinal("id"));
	}
}


написать
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
int colId = reader.GetOrdinal("id");
while (reader.Read())
{
	if (!reader.IsDBNull(colId))
	{
		cdr.Id = reader.GetString(colId);
	}
}



Или можно написать extension метод, который принимает имя колонки и вызывает GetOrdinal() внутри себя.
...
Рейтинг: 0 / 0
Проблема с sqlreader
    #38120292
VIT2708
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bazile,

List<Класс> dList = new List<Класс>();

try
{
reader = command.ExecuteReader();
while (reader.Read())
{
Класс cdd = Функция в которой вылетает ошибка(); // внутри этой функции и вылетает ошибка которую я привел ранее, в sql management studio такой запрос возвращает 2 записи
dList.Add(cdd);
}
}
catch { return null; }
finally { CloseReader(); }
...
Рейтинг: 0 / 0
Проблема с sqlreader
    #38120417
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VIT2708, Read() ты вызываешь, а что насчет второго совета?

bazileНе помешает также убедится, что SP возвращает только один результат. В этом случае на закладке Messages будет только одна надпись вида (n row(s) affected).
...
Рейтинг: 0 / 0
Проблема с sqlreader
    #38120895
VIT2708
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bazileVIT2708, Read() ты вызываешь, а что насчет второго совета?

bazileНе помешает также убедится, что SP возвращает только один результат. В этом случае на закладке Messages будет только одна надпись вида (n row(s) affected).

я создал 2 тестовые строки в базе. И таких ридеров у меня много но только этот не работает. Хотя Messages пуст, странно.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Проблема с sqlreader
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]