データセットから 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 プロパティがプロバイダーでサポートされていないようです。Connection Timeout、Timeout、ConnectionTimeout、ConnectTimeout なども同様です。私のコードは、Data Adapter と InsertCommand を作成し、データセットから更新します。これは、Update コマンド自体が 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 であり、プロバイダーは接続文字列でタイムアウトをサポートしていないようです。どうすればよいでしょうか....
ありがとう。