Я импортирую файл excel в DataTable, а затем получаю информацию, необходимую мне из каждого последующего DataRow, которые затем должны быть вставлены в список. У меня есть метод, который я вызываю, когда мне нужно импортировать файл Excel (.xlsx или .xls) в DataTable, и я использую его в 6 или 7 других местах в моей программе, поэтому я уверен, что нет любые ошибки там.Чтение файла Excel в DataTable возвращает пустые поля в DataRows
Моя проблема заключается в том, что, когда я обращаюсь к DataRow, в этом конкретном DataTable, первые несколько полей содержат значения, но все остальное равно null. Если я смотрю на него в окне Locals я могу видеть, что DataRow выглядит следующим образом:
[0] {"Some string value"}
[1] {}
[2] {}
[3] {}
Когда он должен выглядеть следующим образом:
[0] {"Some string value"}
[1] {"Another string value"}
[2] {"Foo"}
[3] {"Bar"}
Вот метод, который обрабатывает импорт:
public List<DataTable> ImportExcel(string FileName)
{
List<DataTable> _dataTables = new List<DataTable>();
string _ConnectionString = string.Empty;
string _Extension = Path.GetExtension(FileName);
//Checking for the extentions, if XLS connect using Jet OleDB
if (_Extension.Equals(".xls", StringComparison.CurrentCultureIgnoreCase))
{
_ConnectionString =
"Provider=Microsoft.Jet.OLEDB.4.0; Data Source={0};Extended Properties=Excel 8.0";
}
//Use ACE OleDb
else if (_Extension.Equals(".xlsx", StringComparison.CurrentCultureIgnoreCase))
{
_ConnectionString =
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=Excel 8.0";
}
DataTable dataTable = null;
var count = 0;
using (OleDbConnection oleDbConnection =
new OleDbConnection(string.Format(_ConnectionString, FileName)))
{
oleDbConnection.Open();
//Getting the meta data information.
//This DataTable will return the details of Sheets in the Excel File.
DataTable dbSchema = oleDbConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables_Info, null);
foreach (DataRow item in dbSchema.Rows)
{
//reading data from excel to Data Table
using (OleDbCommand oleDbCommand = new OleDbCommand())
{
oleDbCommand.Connection = oleDbConnection;
oleDbCommand.CommandText = string.Format("SELECT * FROM [{0}]",
item["TABLE_NAME"].ToString());
using (OleDbDataAdapter oleDbDataAdapter = new OleDbDataAdapter())
{
if (count < 3)
{
oleDbDataAdapter.SelectCommand = oleDbCommand;
dataTable = new DataTable(item["TABLE_NAME"].ToString());
oleDbDataAdapter.Fill(dataTable);
_dataTables.Add(dataTable);
count++;
}
}
}
}
}
return _dataTables;
}
Любые мысли?