powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / IndexOutOfRangeException: Объясните дураку КАК такое вообще может быть?
25 сообщений из 35, страница 1 из 2
IndexOutOfRangeException: Объясните дураку КАК такое вообще может быть?
    #38225622
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Очень странная ошибка вываливается иногда у клиента.
Я у себя на сервере добиться появления этой ошибки не могу.

Код: c#
1.
2.
3.
4.
5.
6.
7.
sql_com.CommandText = "SELECT Field1, Field2 FROM MyTable WHERE...
[...]
while (sql_rdr.Read())
{
	field1= Convert.ToString(DBNullIs(sql_rdr["Field1"], "")); // Вот тут вылетает - "System.IndexOutOfRangeException: Field1"
	field2 = Convert.ToString(DBNullIs(sql_rdr["Field2"], ""));
}



Field1 как вы видите выбирается в SQL-Запросе.
Впечатление такое что SQL-Запрос возвращает 0 записей, а ридер таки пытается что-то там прочитать.
Я другого объяснения не нахожу.
Вопрос в том: Как такое может быть или если не в этом дело, то в чём?
Спасибо.
...
Рейтинг: 0 / 0
IndexOutOfRangeException: Объясните дураку КАК такое вообще может быть?
    #38225625
Фотография Паганель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
M234Впечатление такое что SQL-Запрос возвращает 0 записейгляньте профилером
...
Рейтинг: 0 / 0
IndexOutOfRangeException: Объясните дураку КАК такое вообще может быть?
    #38225629
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
M234, как reader создаётся?
...
Рейтинг: 0 / 0
IndexOutOfRangeException: Объясните дураку КАК такое вообще может быть?
    #38225646
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,

Код: c#
1.
SqlDataReader sql_rdr = sql_com.ExecuteReader();
...
Рейтинг: 0 / 0
IndexOutOfRangeException: Объясните дураку КАК такое вообще может быть?
    #38225655
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПаганельM234Впечатление такое что SQL-Запрос возвращает 0 записейгляньте профилером
Во-первых у меня и ошибки то этой не появляется.
Во-вторых если даже никаких результатов не возвращается(это я симулировал), то while (sql_rdr.Read()) ничего читать не должно.
Или я не прав?
...
Рейтинг: 0 / 0
IndexOutOfRangeException: Объясните дураку КАК такое вообще может быть?
    #38225664
Фотография Паганель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а так?
Код: c#
1.
2.
3.
4.
while (sql_rdr.Read())
{
	field2 = Convert.ToString(DBNullIs(sql_rdr["Field2"], ""));
}
...
Рейтинг: 0 / 0
IndexOutOfRangeException: Объясните дураку КАК такое вообще может быть?
    #38225671
Фотография Паганель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
M234Я у себя на сервере добиться появления этой ошибки не могунадо обратиться к тестировщикам, пусть найдут как повторить
...
Рейтинг: 0 / 0
IndexOutOfRangeException: Объясните дураку КАК такое вообще может быть?
    #38225676
cooldeveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
M234, возьми нормальный маппер для фетчинга IDataReader => IEnumerable<T>, гляжу на твой гавнокод и меня начинает тошнить :)
...
Рейтинг: 0 / 0
IndexOutOfRangeException: Объясните дураку КАК такое вообще может быть?
    #38225685
Фотография Паганель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да, а что такое DBNullIs
?
...
Рейтинг: 0 / 0
IndexOutOfRangeException: Объясните дураку КАК такое вообще может быть?
    #38225686
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Паганельа так?
Код: c#
1.
2.
3.
4.
while (sql_rdr.Read())
{
	field2 = Convert.ToString(DBNullIs(sql_rdr["Field2"], ""));
}



Я не знаю. У меня всё работает. Хоть так хоть сяк.
Ладно, сейчас "обращусь к тестировщикам" в смысле пойду тестировать... ;)
Я думал может есть какая теория под это дело...
Может if (sql_rdr.HasRows) спасёт отца русской демократии?
...
Рейтинг: 0 / 0
IndexOutOfRangeException: Объясните дураку КАК такое вообще может быть?
    #38225691
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Паганельда, а что такое DBNullIs
?

Ничего страшного:

Код: c#
1.
2.
3.
4.
 public static object DBNullIs(object colValue, object defValue)
    {
        if (!Convert.IsDBNull(colValue)) return (colValue); else return (defValue);
    }
...
Рейтинг: 0 / 0
IndexOutOfRangeException: Объясните дураку КАК такое вообще может быть?
    #38225716
cooldeveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cooldeveloperM234, возьми нормальный маппер для фетчинга IDataReader => IEnumerable<T>, гляжу на твой гавнокод и меня начинает тошнить :)

http://codearticles.ru/home/articleview/1383
Код: c#
1.
2.
3.
4.
5.
// IDataReader => IEnumerable<T>
using (SqlDataReader reader = command.ExecuteReader(CommandBehavior.CloseConnection))
{
    var employeesOfReader = mapper.Map<Employee>(reader as IDataReader);
}



На кой ляд какие-то еще педали? :)
...
Рейтинг: 0 / 0
IndexOutOfRangeException: Объясните дураку КАК такое вообще может быть?
    #38225732
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
M234skyANA,

Код: c#
1.
SqlDataReader sql_rdr = sql_com.ExecuteReader();

Хм. А команда случаем не singleton? Может параллельный запрос меняет текст команды? Может у Вас что-то static?
...
Рейтинг: 0 / 0
IndexOutOfRangeException: Объясните дураку КАК такое вообще может быть?
    #38225747
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cooldevelopercooldeveloperM234, возьми нормальный маппер для фетчинга IDataReader => IEnumerable<T>, гляжу на твой гавнокод и меня начинает тошнить :)

http://codearticles.ru/home/articleview/1383
Код: c#
1.
2.
3.
4.
5.
// IDataReader => IEnumerable<T>
using (SqlDataReader reader = command.ExecuteReader(CommandBehavior.CloseConnection))
{
    var employeesOfReader = mapper.Map<Employee>(reader as IDataReader);
}



На кой ляд какие-то еще педали? :)Предлагаете педали ТС поменять на Ваши педали?
...
Рейтинг: 0 / 0
IndexOutOfRangeException: Объясните дураку КАК такое вообще может быть?
    #38225765
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cooldeveloperM234, возьми нормальный маппер для фетчинга IDataReader => IEnumerable<T>, гляжу на твой гавнокод и меня начинает тошнить :)

Это древний говнокод который был написан ажно в 2007 году на .Net 2.0 и который до сих пор проблем не вызывал.
...
Рейтинг: 0 / 0
IndexOutOfRangeException: Объясните дураку КАК такое вообще может быть?
    #38225770
cooldeveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAПредлагаете педали ТС поменять на Ваши педали?
Если маппер - это педали, я могу тебе, разве что, тебе посочувствовать
...
Рейтинг: 0 / 0
IndexOutOfRangeException: Объясните дураку КАК такое вообще может быть?
    #38225807
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cooldeveloperskyANAПредлагаете педали ТС поменять на Ваши педали?
Если маппер - это педали, я могу тебе, разве что, тебе посочувствовать
Ну это смотря как посмотреть. Если по Фаулеру: Data Mapper , - то
1. Ваш маппер не является Data Mapper-ом по Фаулеру;
2. Что-то я не заметил в коде ТС доменных (бизнес) объектов.

Так что ему надо либо всё нафиг зарефакторить, либо оставить свои педали.
...
Рейтинг: 0 / 0
IndexOutOfRangeException: Объясните дураку КАК такое вообще может быть?
    #38225810
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
M234cooldeveloperM234, возьми нормальный маппер для фетчинга IDataReader => IEnumerable<T>, гляжу на твой гавнокод и меня начинает тошнить :)

Это древний говнокод который был написан ажно в 2007 году на .Net 2.0 и который до сих пор проблем не вызывал.Что насчёт синглтонов и статиков?
...
Рейтинг: 0 / 0
IndexOutOfRangeException: Объясните дураку КАК такое вообще может быть?
    #38225826
cooldeveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAНу это смотря как посмотреть. Если по Фаулеру: Data Mapper , - то
1. Ваш маппер не является Data Mapper-ом по Фаулеру;
Смотреть никуда не нужно, нужно почитать про такие известные мапперы, как AutoMapper и ExpressionMapper и сделать соответствующие выводы для задач преобразования экземпляров классов к различным типам.

skyANA2. Что-то я не заметил в коде ТС доменных (бизнес) объектов.
Маппер маппит экземпляр класса одного типа в другой. Он ничего не знает и не должен знать о доменных или не домменных объектах.

skyANAТак что ему надо либо всё нафиг зарефакторить, либо оставить свои педали.
Ему нужно убрать гавнокод и вставить одну строчку с маппером. Больше ему ничего делать не нужно.
...
Рейтинг: 0 / 0
IndexOutOfRangeException: Объясните дураку КАК такое вообще может быть?
    #38225843
cooldeveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAЕсли по Фаулеру: Data Mapper
Фаулер не дает библейское определение маппера, он просто его рассматривает применительно к БД. Что нам и говорит название главы:

...A layer of Mappers (473) that moves data between objects and a database while keeping them independent of each other and the mapper itself.

...You still need to transfer data between the two schemas, and this data transfer becomes a complexity in its own right. If the in-memory objects know about the relational database structure, changes in one tend to ripple to the other.

Мапперы же используется и в других задачах, никак не связанных с базами данных. Особенно вкусно они применяются в SOA ориентированных средах для трансфера объектов из одного состояния в другое. Так что немного глуповато звучит "Маппер по Фаулеру" ...
...
Рейтинг: 0 / 0
IndexOutOfRangeException: Объясните дураку КАК такое вообще может быть?
    #38225852
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cooldeveloper, у Фаулера есть маппер , а есть дата маппер . А теперь смотрим название Вашего рецепта: "Рецепт - DataMapper".
...
Рейтинг: 0 / 0
IndexOutOfRangeException: Объясните дураку КАК такое вообще может быть?
    #38225893
cooldeveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAcooldeveloper, у Фаулера есть маппер , а есть дата маппер . А теперь смотрим название Вашего рецепта: "Рецепт - DataMapper".
1. Не вижу противоречий. DataMapper - это мой маппер с моим названием, которое я ему дал. Маппер для данных, данные могут быть какими угодно. Есть еще Expression маппер - так что, будем говорить о необходимости наличия Expression выражений в коде? Есть Auto маппер , тут вообще непонятно к чему оно относится - к автомобилям, наверное.
2. Ссылка на просто "Mapper" вообще левая, как я понял. Она не относится к задаче перемапливания свойств одного экземпляра на свойства другого. Поэтому, прежде чем пихать Фаулера куда ни попадя, сначала разберись с тематикой и контекстом применения
...
Рейтинг: 0 / 0
IndexOutOfRangeException: Объясните дураку КАК такое вообще может быть?
    #38225902
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cooldeveloper, дак и я не вижу противоречий. Я же писал, что Ваш маппер не является Data Mapper -ом по Фаулеру. Где тут противоречие?
...
Рейтинг: 0 / 0
IndexOutOfRangeException: Объясните дураку КАК такое вообще может быть?
    #38225909
cooldeveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAcooldeveloper, дак и я не вижу противоречий. Я же писал, что Ваш маппер не является Data Mapper -ом по Фаулеру. Где тут противоречие?
Противоречние в том, что (повторюсь):
1. Фаулер не дает библейское определение маппера, он просто его рассматривает применительно к БД .
2. Я так и не понял, почему мой маппер не является "дата меппером", о котором пишет Фаулер. Он может работать с любыми объектами, в том числе и доменными.
3. Ты решил понасиловать мне моск?
...
Рейтинг: 0 / 0
IndexOutOfRangeException: Объясните дураку КАК такое вообще может быть?
    #38225934
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поковырял AutoMapper
Что то не могу понять зачем кеширование в нутрях происходит IDataReader - жирновато, ну да ладно.
а вот за это:
Код: c#
1.
2.
3.
  for (var i = 0; i < dataRecord.FieldCount; i++)
            {
                var propertyInfo = destinationType.GetProperty(dataRecord.GetName(i), BindingFlags.Public | BindingFlags.IgnoreCase | BindingFlags.Instance);


надо ругать, имхо если его привести в порядок кое где, будет намного быстрей и худей..
...
Рейтинг: 0 / 0
25 сообщений из 35, страница 1 из 2
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / IndexOutOfRangeException: Объясните дураку КАК такое вообще может быть?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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