Как устранить ошибку или отсутствие ответа при чтении из файла excel в формате. xlsx с помощью oledb в C#?
Как устранить ошибку или отсутствие ответа при чтении из файла excel в формате. xlsx с помощью Oledb в c#?
Я читаю данные из Excel через Oledb-соединение. Я получаю сообщение об ошибке " попытка чтения защищенной от записи памяти. это часто является признаком того, что другая память повреждена"." или без ответа на заполнение данных в таблицу данных для файлов excel в формате.xlsx. В остальном с форматом .xls он работает нормально.
Мой код выглядит следующим образом:
if (fileExtension == ".xls" || fileExtension == ".XLS") { connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filelocation + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=2\""; } else if (fileExtension == ".xlsx" || fileExtension == ".XLSX") { connStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filelocation + ";Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=2\""; } DataTable dt = new DataTable(); System.Data.OleDb.OleDbConnection MyConnection; System.Data.DataSet ds; System.Data.OleDb.OleDbDataAdapter MyCommand; MyConnection = new System.Data.OleDb.OleDbConnection(connStr); MyCommand = new System.Data.OleDb.OleDbDataAdapter("select * from [Sheet1$]", MyConnection); ds = new System.Data.DataSet(); MyCommand.Fill(dt); MyConnection.Close();
Что я уже пробовал:
Мой код выглядит следующим образом:
если (расширение == ".файл XLS" || расширение == ".В XLS")
{
connStr = "поставщика=Майкрософт.Джет.Oledb для.4.0;Источник данных=" + filelocation, который + ";дополнительные свойства=\в"Excel 8.0;HDR съемка=да;компания IMEX=2\"";
}
остальное, если (расширение == ".файлы XLSX" || расширение == ".XLSX-файл")
{
connStr = "поставщика=Майкрософт.Туз.Oledb для.12.0;Источник данных=" + filelocation, который + ";дополнительные свойства=\"значение Excel 12.0;HDR съемка=да;компания IMEX=2\"";
}
DataTable dt = новый DataTable();
Системы.Данных.Oledb для.Метод Oledbconnection MyConnection;
Системы.Данных.Набор ДС;
Системы.Данных.Oledb для.Объект Oledbdataadapter MyCommand;
MyConnection = новая система.Данных.OleDb. OleDbConnection(connStr);
MyCommand = новая система.Данных.OleDb.OleDbDataAdapter ("select * from [Sheet1$]", MyConnection);
ДС = новая система.Данных.Набор данных();
Моя команда.Заполнение (dt);
MyConnection.Закрывать();