Должен ли я прочитать файл Excel через OleDb Jet4.0 и сохранить в наборе данных? - PullRequest
0 голосов
/ 22 августа 2011

Мне нужно прочитать файл Excel и поместить в набор данных.

Должен ли я прочитать содержимое файла Excel через OleDbDataAdapter, а затем заполнить его набором данных?Я пытался, но не получилось.При этом приложение не может распознать формат базы данных, когда адаптер данных выполняет метод Fill.

Код:

String queryAll = "SELECT * FROM [Sheet1$]";
String xlsPath = Directory.GetCurrentDirectory() + "\\paid.xls";
String strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + xlsPath;
try
{
    m_dbDA = new OleDbDataAdapter(queryAll, strConn);
    DataSet dsPaidXls = new DataSet();
    m_dbDA.Fill(dsPaidXls);  //exception here
 }
 catch (System.Exception ex)
 {
    MessageBox.Show(ex.Message);
 }

Означает ли это, что невозможно напрямую прочитать данные Excel и поместить их в новый набор данных?И единственный способ - читать данные Excel по ячейкам и вставлять в новый DataSet с данными?

Заранее спасибо.

========================================
Решено
========================================

String queryAll = "SELECT * FROM [Sheet1$]";
String xlsPath = Directory.GetCurrentDirectory() + "\\paid.xls";
String strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + xlsPath +
                 ";Extended Properties='Excel 8.0;IMEX=1';";
try
{
   m_dbDA = new OleDbDataAdapter(queryAll, strConn);
   DataSet dsPaidXls = new DataSet();
   m_dbDA.Fill(dsPaidXls,"[Sheet1$]");
   dataGridView1.DataSource = dsPaidXls;
   dataGridView1.DataMember = "[Sheet1$]";
 }
 catch (System.Exception ex)
 {
     MessageBox.Show(ex.Message);
 }

Ответы [ 3 ]

2 голосов
/ 22 августа 2011

OLEDB работает достаточно хорошо, если вы правильно указали строку подключения и знаете о проблемах с типами данных. Jet для версий до 2007 года, и вам нужно добавить расширенные свойства для Excel.

String strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" 
  + xlsPath + "Extended Properties='Excel 12.0 Xml;HDR=YES';";

См: Строки подключения
Как использовать ADO с данными Excel из Visual Basic или VBA (содержит полезные заметки)
Различные заметки

2 голосов
/ 22 августа 2011

Когда вы читаете файлы Excel через OleDB, убедитесь, что у вас есть правильная версия поставщика (одна для xls, одна для xlsx), а также убедитесь, что в качестве платформы выбран x86.

Если вынет, он будет скомпилирован в x64 в 64-битной системе, и, поскольку OleDb устарел, 64-битных драйверов OleDb нет, что означает, что ваша программа потерпит крах при вызове OleDb.

Также должен быть установлен системный драйвер Office 2007 (Компоненты подключения данных ACE).

См. Здесь: Диагностика исключения OLEDB при запросе к Excel 2010

Вы также можете использовать ODBC или Excel Package Plus.Опять же, вам нужно взять другую библиотеку, если формат xls, а не xlsx.

ExcelLibrary для XLShttp://code.google.com/p/excellibrary/

Пакет Excel Plus для XLSXhttp://epplus.codeplex.com/

0 голосов
/ 22 августа 2011

Вы должны избегать использования OleDb для чтения файлов Excel. Много питалов.

Для файлов xls это работает намного лучше и надежнее.

http://www.codeproject.com/KB/office/ExcelReader.aspx

Для файлов xlsx используйте Office Open XML SDK:

http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=5124

...