У меня возникла проблема с тайм-аутом при записи данных из набора данных в электронную таблицу Excel. Вот моя строка подключения в настоящее время:
<add key="ExcelConnectionStringHeader" value="Provider=Microsoft.ACE.OLEDB.12.0;Connect Timeout=30;Extended Properties="Excel 12.0;HDR=YES";Data Source="/>
Похоже, что свойство Connect Timeout не поддерживается поставщиком. Как и время ожидания соединения, таймаут, время ожидания соединения, время ожидания соединения и т. Д. Мой код создал адаптер данных и команду InsertCommand и обновляет набор данных. Это отлично работает, если сама команда обновления не занимает более 15 секунд, что является тайм-аутом OleDb по умолчанию. Вот почему я пытаюсь установить его в строке подключения. Я увеличил CommandTimeout со значения по умолчанию 30, но это действительно не имеет значения. Ниже мой код:
OleDbDataAdapter da = new OleDbDataAdapter(szHeaderSelect, oCnn); // Ratings_Test -- Loan_Test$A1:F1]",
DataSet dsTest = new DataSet();
da.InsertCommand = new OleDbCommand(szNewSQL + "(" + szColumns + ") " + "VALUES ( " + szParams + ")", oCnn);
da.InsertCommand.CommandTimeout = 300;
foreach (DataRow oDr in dtTable.Rows)
{
drNew = dsTest.Tables[0].NewRow();
dsTest.Tables[0].Rows.Add(drNew);
}
var timer = new System.Diagnostics.Stopwatch();
timer.Start();
var recs = da.Update(dsTest, szExcelTab); // Ratings_Test }
timer.Stop();
Я пропустил циклы и такие, которые фактически создают содержимое и параметры команды вставки. Поверьте, все работает нормально. 2200+ записей работают нормально.
Только после того, как я добавил таймер, я обнаружил, что проблема в тайм-ауте. При обработке 2221 записи это занимает 14,95 секунды и отлично отображается в электронной таблице. При обработке 2260 записей требуется 15,21 секунды, и ничего не отображается. Никаких ошибок нет. Я проверил состояние строки после обновления для всех строк, и все они не показывают сбоев.
Итог, поскольку свойство ConnectionTimeout имеет значение ReadOnly, а поставщик, похоже, не поддерживает тайм-аут в строке подключения, что делать ....
Спасибо.