SqlDataAdapter.Fill () - переполнение конверсии - PullRequest
1 голос
/ 26 сентября 2011

Все,

Я сталкиваюсь с исключениями "Переполнение конверсии" в одном из SqlDataAdapter.Fill() случаев использования десятичного поля.Ошибка происходит для значения, начинающегося с 10 миллиардов, но не до 1 миллиарда.Вот код:

DataSet ds = new DataSet();
SqlDataAdapter sd = new SqlDataAdapter();

adapter.SelectCommand = <my SQL Command instance>
adapter.Fill(ds);

Я прочитал, используя SqlDataReader в качестве альтернативы, но нам нужно явно установить тип данных и точность.Я извлекаю не менее 70 столбцов, и я не хочу устанавливать все из них только для одного десятичного поля по ошибке.

Кто-нибудь может предложить альтернативные подходы?

Спасибо.

1 Ответ

3 голосов
/ 26 сентября 2011

Хотя набор данных разрешен для «заполнения» адаптера данных, я обычно вместо этого использовал DataTable, как при запросах, я ожидаю только один набор результатов.Сказав это, я бы сделал предварительный запрос к таблице, просто чтобы получить ее структуру ... что-то вроде

select whatever from yourTable(s) where 1=2

Это даст ожидаемые столбцы результата, когда вы выполните

DataTable myTable = new DataTable();
YourAdapter.Fill( myTable );

Теперь, когда у вас есть локальная таблица, которая не будет работать с ошибками по размеру контента, потому что не будет возвращено ни одной записи, теперь вы можете явно перейти к этому одному столбцу и установить его тип данных / размер информации, как вам нужно ...

myTable.Columns["NameOfProblemColumn"].WhateverDataType/Precision = Whatever you need...

СЕЙЧАС, ваша локальная схема допустима, и столбец проблемы будет идентифицирован с точностью.Теперь вставьте правильный запрос с правильным предложением where, а не 1 = 2, чтобы фактически возвращать данные ... Так как в первом проходе нет реальных строк, вам даже не нужно делать myTable.Clear(), чтобы очистить строки... Просто повторите запрос и dataAdapter.Fill().

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

...