Прочитайте все excel в папке с помощью oledbconnction C#
1-у меня возникла странная проблема.
Требование: прочитайте список файлов excel в папке и сохраните содержимое в наборе данных.
То, что я написал:
**Button click:** protected void btnUploadExcelFiles_Click(object sender, EventArgs e) { string[] strFiles = Directory.GetFiles(strPath); foreach (string strFile in strFiles) { ClsExcelUpload objExcelUpload = new ClsExcelUpload(); string szConnectionString1 = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source='" + strFile + "';Extended Properties=\"Excel 12.0;HDR=YES;\""; objExcelUpload.ReadExcel(szConnectionString1, strFile); } } **function ReadExcel:** public string ReadExcel(string szConnectionString, string strFile) { OleDbConnection objConn = new OleDbConnection(); objConn.ConnectionString = szConnectionString; objConn.Open(); OleDbDataAdapter DAobjBasicInfo = new OleDbDataAdapter(); DAobjBasicInfo = new OleDbDataAdapter("select * from [Sheet1$]", objConn); DataTable dt1 = new DataTable(); DAobjBasicInfo.Fill(dt1); objConn.Close(); objConn.Dispose(); return ""; }
**Проблема:**
SzConnectionString обновляется с новым именем файла, установленным через цикл, но когда OleDbDataAdapter открывает objConn, он ищет файл Excel, который уже удален. и datatable каждый раз получает первые данные файла каждый раз.
Это самая странная вещь, которую я когда-либо видел, поскольку я не могу определить область проблемы, почему oledbconnection не обновляется.
Что я уже пробовал:
Все функции написаны выше.
j snooze
Глупый вопрос с моей стороны, так как я не уверен, что понимаю ваш вопрос. вы говорите, что файл удален, но он каждый раз получает первые данные файла? так что же это? Файл удаляется или он получает первые данные файла?
Кроме того, я задался вопросом, как ваша строка подключения знает, где находится файл, если только вы не запускаете свой exe-файл в папке расположения всех файлов excel. Почти уверен, что строка подключения нуждается в полном пути, и похоже, что вы предоставляете только имя файла. Вы могли бы это сделать
строка szConnectionString1 = @"Provider=Microsoft.ACE.OLEDB.12.0;Источник данных='" + Path.Combine(strPath,strFile) + "';Extended Properties=\"Excel 12.0;HDR=YES;\"";
PIEBALDconsult
Я вижу несколько плохих вещей, но ничего, что казалось бы проблемой. Вы уверены, что файлы не содержат одинаковых данных?
arunavachowdhury
Хорошо. Я постараюсь объяснить более подробно.
У меня есть один элемент управления FileUpload, который позволяет выбирать и загружать несколько файлов.
командная кнопка, которая копирует размещенный файл через FileUpload в указанное место.
До сих пор все работает так, как и ожидалось.
Теперь у меня есть код, написанный на той же командной кнопке, чтобы прочитать скопированный файл excel.
Первый файл читается правильно.
при чтении второго файла он находит те же данные.
Теперь, чтобы проверить это дальше. Я переместил код чтения файла в другую командную кнопку. Теперь я сделал 2 теста.
Тест 1. Загрузить 2 файла с помощью file upload
Нажмите на командную кнопку 1, чтобы скопировать опубликованные файлы в указанное место
нажмите на командную кнопку 2, чтобы просмотреть файлы в скопированной папке и прочитать
файлы.
Результат: та же проблема, читая второй файл, он получает те же данные.
Тест 2:
Запустить приложение. Не выберите и загрузите любой файл. Вручную скопируйте то же самое в
файлы в указанное место.
нажмите командную кнопку 2, чтобы прочитать файлы.
Файл читается правильно.
совершенно ясно, что нет ничего плохого в функции чтения файлов. Когда загрузка файлов работает, должен быть какой - то конфликт в управлении памятью. Интересно, какова моя альтернатива этому требованию?
PIEBALDconsult
"должен быть какой-то конфликт в управлении памятью" - сомнительно.
Может быть, показать другие части приложения.
Garth J Lancaster
Я замечаю здесь
foreach (string strFile in strFiles) { ClsExcelUpload objExcelUpload = new ClsExcelUpload(); string szConnectionString1 = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source='" + strFile + "';Extended Properties=\"Excel 12.0;HDR=YES;\""; objExcelUpload.ReadExcel(szConnectionString1, strFile); }
вы не избавляетесь от objExcelUpload - было бы это, например
foreach (string strFile in strFiles) { ClsExcelUpload objExcelUpload = new ClsExcelUpload(); string szConnectionString1 = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source='" + strFile + "';Extended Properties=\"Excel 12.0;HDR=YES;\""; objExcelUpload.ReadExcel(szConnectionString1, strFile); // Presumably something else happens here objExcelUpload = null; GC.Collect(); }что-то изменилось ?