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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с DataTable, ....сломал моск.... 
V
    Опции темы
Partizan
Дата 27.3.2008, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

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



Приветы всем!...
В общем у меня проблема, с решением которой я уже сломал моск.....

есть DataTable...из неё выдираются строки Select-ом...
Код

DataTable m_Table;
......
//Куча кода
......
private myMethod()
{
...
DataRowCollection rows = null;
...

rows = m_Table.Select(null, "ID");
}



второй параметр - сортировка по колонке ID....так вот при этой операции вылетает exception: Index was out of array bounds...или чёта в этом роде...дословно не помню... От чего такая беда? - непонятно...гуглю уже третий день...практически безрезультатно...

есть варианты, при которых проблема решается и exception не вылетает:
1) если убрать второй параметр, то метод Select выполняется на ура...

2) добавление какойнить левой колонки так же решает проблему и Select исполняется также на ура....
Код

DataTable m_Table;
......
//Куча кода
......
private myMethod()
{
...
DataRowCollection rows = null;
...
m_Table.Columns.Add("MyCol");
rows = m_Table.Select(null, "ID");
m_Table.Columns.Remove("MyCol");
}


3) если Select вызывать у копии m_Table, которая само собой уже не содержится ни в каком DataSet, то также всё ок...

Код

DataTable m_Table;
......
//Куча кода
......
private myMethod()
{
...
DataRowCollection rows = null;
...
DataTable t = m_Table.Copy();
rows = t.Select(null, "ID");
}



А теперь вопрос: Ктонить знает причину такого поведения DataTable? И как такое поведение побороть по-хорошему, а не извращенскими манипуляциями типа добавления колонок или создания копии таблицы....


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Optimus
Дата 28.3.2008, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(Partizan @  27.3.2008,  21:13 Найти цитируемый пост)

Код

...
DataRowCollection rows = null;
...
rows = m_Table.Select(null, "ID");


Этот код у вас компилируется ?

из msdn
Цитата

  public DataRow[] Select (string filterExpression,string sort)


Делаю так, и всё работает
Код

DataRow[] rows = m_Table.Select(null, "ID");

foreach (DataRow row in rows)
{
  Console.WriteLine(row["ID"]);
}

--------------------
"постановка задачи наполовину решает саму задачу"
PM MAIL   Вверх
Partizan
Дата 28.3.2008, 00:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

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



ошибся...ибо пример не копипастил а воспроизводил....там конечно массив DataRow...
проблема всё ещё не решена..

m_DataTable, из которого делается Select находится в датасете, причём связан с другими таблицами датасета...не знаю на сколько это влияет на такое поведение Select-а (.... ибо даже удаление всех констрейнтов и связей не помогает....

но если сделать копию таблицы, то всё ок....

ни у кого чтоли не было таких проблем?

Это сообщение отредактировал(а) Partizan - 28.3.2008, 00:43


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Optimus
Дата 28.3.2008, 00:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(Partizan @  27.3.2008,  21:13 Найти цитируемый пост)

Код

DataTable m_Table;


как вы инициализируете m_Table ?
--------------------
"постановка задачи наполовину решает саму задачу"
PM MAIL   Вверх
Partizan
Дата 28.3.2008, 09:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

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



m_Table  это таблица из датасета...
тоесть
Код

 m_Table = this.MyDataSet.Tables[ИМЯ_ТАБЛИЦЫ];


на момент вызова Select m_Table гарантированно != null и гарантированно содержит записи...



--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Partizan
Дата 28.3.2008, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

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



Фсё ребят....проблему решил некоторым изменением логики....теперь использую таблицу не из датасета, а отдельную...

з.ы. и тем не менее поведение Select-a не понятно...
в каких случаях он валитцо с IndexOutOfRangeException?


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

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

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

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


 




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


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

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