Мы читаем xls-файл, который регулярно обновляется с внешних ссылок. У нас есть цикл, который читает тот же файл после некоторого интервала в 200 мс. После чтения файла за 1000+ времени мы получаем сообщение об ошибке«Не удалось найти Installable ISAM» C# Исключение после чтения xls-файла
«Механизм базы данных Microsoft Jet не может открыть файл». Он уже открыт исключительно другим пользователем или вам требуется разрешение на просмотр его данных ».
Строка соединения выглядит следующим образом:
Provider = Microsoft.Jet.OLEDB.4.0; источник данных = D: \ FeedFiles \ TESTING1.xls; Extended Properties = "Excel 8.0; HDR = YES ; IMEX = 1; Importmixedtypes = текст; typeguessrows = 0;»
И через какое-то время оно начинает давать «Не удалось найти Installable ISAM».
код следующим образом:
String xlsConnString = String.Format(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=""Excel 8.0;HDR=YES;IMEX=1;Importmixedtypes=text;typeguessrows=0;""", feedFiles.FullName);
OleDbDataAdapter dataAdapter = new OleDbDataAdapter(xlsQuery, xlsConnString);
while (true)
{
try
{
//Exception handling if not able to read xls file.
DataSet dataSet = new DataSet();
dataAdapter.Fill(dataSet);
String fileName = dirstr + "Temp-";
System.IO.StreamWriter file = new System.IO.StreamWriter(fileName + ".tmp");
file.WriteLine(dataSet.GetXml());
file.Close();
try
{
File.Replace(fileName + ".tmp", dirstr + "Temp-" + filecount.ToString() + ".xml", null);
}
catch (Exception ex)
{
try
{
File.Move(fileName + ".tmp", dirstr + "Temp-" + filecount.ToString() + ".xml");
}
catch
{
Thread.Sleep(xlsThreadSleep);
}
}
filecount++;
if (filecount > maxFileCnt)
{
filecount = 0;
}
dataSet.Clear();
dataSet = null;
Thread.Sleep(xlsThreadSleep);
}
catch (Exception ex)
{
txtlog.BeginInvoke(new DelegateForTxtLog(functionFortxtLog), "Exception occured > " + ex.Message);
feedFileIndex++;
if (feedFileIndex == feedFiles.Length)
{
feedFileIndex = 0;
}
dataAdapter.Dispose();
dataAdapter = null;
Thread.Sleep(xlsThreadSleep * 20);
xlsConnString = String.Format(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=""Excel 8.0;HDR=YES;IMEX=1;Importmixedtypes=text;typeguessrows=0;""", feedFiles[feedFileIndex].FullName);
txtlog.BeginInvoke(new DelegateForTxtLog(functionFortxtLog), "Trying connecting with connection string > " + xlsConnString);
dataAdapter = new OleDbDataAdapter(xlsQuery, xlsConnString);
txtlog.BeginInvoke(new DelegateForTxtLog(functionFortxtLog), "Now reading file > " + feedFiles[feedFileIndex].FullName);
}
}
1. Этот код (без * txtlog * связанных строк) работает на моей машине всего 1000 раз. Таким образом, проблема может быть связана с данными внутри вашего xls-файла 2. Где возникает исключение? Какая строка? 3. Вы пытались добавить *; Mode = Share Exclusive; * в строку подключения? – itsho