Si verifica un problema di timeout durante la scrittura di dati da un set di dati in un foglio di calcolo Excel. Attualmente la stringa di connessione è la seguente:Excel con timeout ACE in .NET tramite Aggiornamento scheda dati
<add key="ExcelConnectionStringHeader" value="Provider=Microsoft.ACE.OLEDB.12.0;Connect Timeout=30;Extended Properties="Excel 12.0;HDR=YES";Data Source="/>
La proprietà Connect Timeout non sembra essere supportata dal provider. Nessu- na Timeout connessione, Timeout, ConnectionTimeout, ConnectTimeout, ecc. Il mio codice ha creato una scheda dati e InsertCommand e aggiornamenti da un set di dati. Funziona alla grande, a meno che il comando Update stesso richieda più di 15 secondi, che è il timeout OleDb predefinito. Ecco perché sto cercando di impostarlo nella stringa di connessione. Ho aumentato CommandTimeout dal valore predefinito di 30, ma questo è davvero irrilevante. Di seguito è riportato il mio codice:
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();
Ho omesso i loop e tale che effettivamente costruisco il contenuto e i parametri del comando di inserimento. Fidati di me, tutto funziona bene. 2200+ record funzionano bene.
E 'stato dopo aver aggiunto il timer che ho scoperto che il problema era il timeout. Durante l'elaborazione di 2221 record, ci vogliono 14,95 secondi e si presenta bene nel foglio di calcolo. Durante l'elaborazione di 2260 record, ci vogliono 15.21 secondi e non compare nulla. Non ci sono errori di alcun tipo. Ho controllato lo stato della riga dopo l'aggiornamento per tutte le righe e non mostrano alcun errore.
Linea di fondo, dal momento che la proprietà ConnectionTimeout è di sola lettura, e il provider non sembra sostenere un timeout nella stringa di connessione, cosa fare ....
Grazie.
Proprio come una cosa in più, verifica openxml, funziona molto bene con i fogli Excel anche con fogli Excel molto grandi – kunjee