none
Ошибка: просмотр содержимого таблицы БД, через DataGridView RRS feed

  • Вопрос

  • В приложении WinForms создаю таблицу через DataGridView.
    После запуска программы форма не запускается, а в IntelliTrace пишет, что обычный SELECT из этой таблицы вызвал исключение: System.OutOfMemoryExeption.

    После этого исключения идет куча System.ArgumentExeption, которая констатирует какие-то исключения: Перехвачено "Объект должен иметь тип Double" и т.п.

    Эта таблица самая большая в БД, но не такая уж большая вообще - порядка 25 млн., записей. С другими таблицами проблем не возникает. Объясните как исправить эту ошибку или сделать так чтобы таблица нормально отображалась на форме?

    Заранее благодарю!
    15 августа 2013 г. 12:03

Ответы

  • Можно посчитать что 1 ваша запись имеет приблизительный размер 1кб, следовательно 25 мил записей будет приблизительно 25 гигов, в память это точно не поместится.

    Почитайте как сделать постраничное чтение данных из БД вот тут Paging Through a Query Result

    И еще у вас столбец имеет тип sql_variant в котором может находится все что угодно от строки до Guid, возможно в одной из записей у вас там и хранится что то что не возможно преобразовать в double, а dataSet у вас требует колонку в которой тип double, из-за это и появляются ошибки "Объект должен иметь тип Double"

    16 августа 2013 г. 5:37

Все ответы

  • Добрый день.

    Приведите фрагмент кода, где вы открываете подключение, формируете команду и датаадаптер для загрузки данных (если читаете через ExecuteReader, то этот фрагмент). Сейчас не очень понятно, в чем у вас проблема. Кстати, если используете типизированный DataSet, то может быть проблема с неправильными типами столбцов...

    15 августа 2013 г. 12:06
    Отвечающий
  • Я делаю это без написания кода. Т.е. подсоединяюсь к бд, вытаскиваю таблицу на форму, запускаю программу, она зависает, а потом когда я её останавливаю, то могу смотреть ошибки, которые там есть .

    типы данных таблицы:

    int, sql_variant, int, varchar(100)

    15 августа 2013 г. 13:19
  • Скажем так 25 лимонов записей не такой уж и маленький размер, попробуйте читать порциями данные, врятли вы просматриваете сразу все записи
    15 августа 2013 г. 13:42
  • Ок. Как это сделать не сложно для начинающего .Net разработчика?

    Цель получить таблицу, содержимое которой можно фильтровать после чего изменять и сохранять в БД.

    15 августа 2013 г. 13:46
  • Можно посчитать что 1 ваша запись имеет приблизительный размер 1кб, следовательно 25 мил записей будет приблизительно 25 гигов, в память это точно не поместится.

    Почитайте как сделать постраничное чтение данных из БД вот тут Paging Through a Query Result

    И еще у вас столбец имеет тип sql_variant в котором может находится все что угодно от строки до Guid, возможно в одной из записей у вас там и хранится что то что не возможно преобразовать в double, а dataSet у вас требует колонку в которой тип double, из-за это и появляются ошибки "Объект должен иметь тип Double"

    16 августа 2013 г. 5:37