2015-07-29 1 views
3

Вот мой код:OleDataAdapter Наполните Метод Возвращение Пустые строки в таблице данных

public static DataTable GetDataFromSpreadsheet(OleDbConnection conn) 
    { 
     DataTable dt = new DataTable(); 
     OleDbCommand cmd = new OleDbCommand("SELECT * FROM [Sheet1$]", conn); 
     conn.Open(); 
     OleDbDataAdapter da = new OleDbDataAdapter(cmd); 
     da.Fill(dt); 
     conn.Close(); 
     return dt; 
    } 

Когда этот метод вызывается, я не получаю сообщение об ошибке на всех! Когда я помещаю часы в таблицу данных (dt), я вижу, что он пуст. Нет заголовков строк, а строки пустые. Я знаю, что запрос действителен до некоторой степени, потому что Rows.Count on dt возвращает количество строк в листе, который я запрашиваю.

Что я могу делать неправильно?

Спасибо за помощь!

EDIT: Вот моя Строка подключения

<add name="EXCEL" connectionString="Provider=Microsoft.ACE.OLEDB.12.0; 
      Data Source={0}; 
      Extended Properties='Excel 8.0; 
      HDR=Yes; IMEX=1;'" /> 

Я помещаю местоположение файла вместо {0}

+2

Как вы можете получить Rows.count через DT, когда ваш DataTable пуст? –

+0

Я просматриваю код в VS2013. Когда я добираюсь до Da.fill (dt), я смотрю на переменную dt, а число строк показывает количество строк. Однако, если я смотрю на содержимое строк, они пусты. –

+2

положить точку останова на da.fill (dt); и проверите ли вы dt после выполнения этой строки? проверить ваш запрос также в вашей базе данных, может быть, у вас нет строк в вашей базе данных? –

ответ

1

установить соединение

String strExcelConn = "Provider=Microsoft.Jet.OLEDB.4.0;" 
+ "Data Source=Book1.xls;" 
+ "Extended Properties='Excel 8.0;HDR=Yes'"; 

OleDbConnection connExcel = new OleDbConnection(strExcelConn); 
OleDbCommand cmdExcel = new OleDbCommand(); 
cmdExcel.Connection = connExcel; 

Обращение к Sheets

connExcel.Open(); 
DataTable dtExcelSchema; 
dtExcelSchema = connExcel.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); 
connExcel.Close(); 
DataSet ds = new DataSet(); 
string SheetName = dtExcelSchema.Rows[0]["TABLE_NAME"].ToString(); 
cmdExcel.CommandText = "SELECT * From [" + SheetName + "]"; 
da.SelectCommand = cmdExcel; 
da.Fill(ds); 
connExcel.Close(); 
0

Перейдите по этой ссылке

https://www.connectionstrings.com/excel/

настройки Try IMEX=1 или HDR=YES в строке подключения

+0

У меня есть. Строка подключения находится в редакции. –

+0

Я не вижу IMEX = 1 в вашей строке подключения –

+0

Теперь он протестирован в программе и по-прежнему имеет ту же проблему –

0
список

DataAdapter.Fill Метод перегрузки заключается в следующем:

  • Fill (DataSet)
  • Fill (DataTable, IDataReader)
  • Fill (DataTable [], IDataReader, Int32, Int32)
  • Заливка (DataSet, String, IDataReader, Int32, Int32)

Там нет метода с один параметр DataTable.

В вашем случае вы можете использовать метод Fill (DataSet) и возвращать. Таблицы [0] или. Таблицы ["TableName"];

Взгляните следующий код:

public static DataTable GetDataFromSpreadsheet(OleDbConnection conn) 
{ 
    DataSet ds = new DataSet(); 
    OleDbCommand cmd = new OleDbCommand("SELECT * FROM [Sheet1$]", conn); 
    conn.Open(); 
    OleDbDataAdapter da = new OleDbDataAdapter(cmd); 
    da.Fill(ds); 
    conn.Close(); 
    return ds.Tables[0]; 
} 
+0

Я пробовал это, и я все равно получаю пустую таблицу. –

+0

Вы ошибаетесь. Существует перегрузка, допускающая только DataTable. – robBerto

Смежные вопросы