2010-03-15 2 views
1

Я получаю странную проблему. Я использую OLEDB для подключения excel с помощью строки подключения = Provider = Microsoft.Jet.OLEDB.4.0; Источник данных = c: \ Execute.xls; Расширенные свойства = Excel 8.0; ");Соединение OLEDB не считывает данные с листа excel

Файл excel содержит столбцы с строка/целочисленные значения. проблема заключается в том, что иногда связь чтение значения из листа Absolutly хорошо, но иногда он пропускал некоторые значения данных и показывает их как System.DBNull. поведения очень непоследовательно. пожалуйста, помогите.

ответ

1

Моей прежде всего, нужно проверить региональные параметры. Форматы чисел будут отличаться от одного регионального параметра к другому, и это может вызвать проблему. Хотя Excel должен управлять им f или вы автоматически, иногда это просто не так, как оно запутано или что-то в этом роде, а затем визуализировать некоторые странные данные, такие как значения DBNull.

0

Это ваша проблема. IIRC, драйвер только считывает первые 8 строк данных и определяет тип данных столбцов на основе этого.

Так, скажем, в первых 8 строках столбца 1 у вас есть только цифры. Драйвер решит, что столбец является целым числом. Затем, если он встречает строку в строке 9, она не сможет преобразовать ее в целое число и, таким образом, вернуть DBNull к вам.

Есть несколько вещей, которые вы можете сделать.

  • Предварительная обработка ваших таблиц и конвертировать все в строки
  • Существует запись в реестре (место ускользает от меня в данный момент), что позволяет увеличить количество строк, которое использует драйвер для определения данных тип.
  • использовать коммерческий EXcel Контролируйте читателя складывалось
  • Откройте лист с помощью библиотеки Excel Interop и читать клетки на собственном
+0

Спасибо за ответ. теперь я изменил тип столбца на «текст» из «общего». но все же такая же проблема существует. Она по-прежнему не принимает числовые значения и показывает их как System.DB Null ... Есть ли какое-либо решение для этого? – Pooja

2
+0

У меня также была колонка с кажущимися смешанными числовыми/текстовыми типами данных, которые я просто хотел обработать как текст. То, что заставило его работать для меня, заключалось в том, чтобы добавить IMEX = 1 в параметры строки подключения. –

0

использовать этот код

string pathcpnn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source =" + textBox1.Text + ";Extended Properties=\""Excel 8.0;HDR=Yes;IMEX=1;";"; 

OleDbConnection con = new OleDbConnection(pathcpnn); 

OleDbDataAdapter myDataAdapter = new OleDbDataAdapter("Select * from[" + textBox2.Text + "$]", con); 

myDataAdapter.Fill(dt); 

DAtagridview1.datasource=dt; 
Смежные вопросы