【发布时间】:2012-10-13 20:29:26
【问题描述】:
我在将数据从数据集写入 Excel 电子表格时遇到超时问题。这是我目前的连接字符串:
<add key="ExcelConnectionStringHeader" value="Provider=Microsoft.ACE.OLEDB.12.0;Connect Timeout=30;Extended Properties="Excel 12.0;HDR=YES";Data Source="/>
提供程序似乎不支持连接超时属性。连接超时、超时、连接超时、连接超时等也不是。我的代码创建了一个数据适配器和 InsertCommand,并从数据集进行更新。除非更新命令本身花费超过 15 秒(这是默认的 OleDb 超时),否则这非常有效。这就是为什么我试图在连接字符串中设置它。我已经从默认的 30 增加了 CommandTimeout,但这真的无关紧要。以下是我的代码:
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 属性是只读的,并且提供程序似乎不支持连接字符串中的超时,该怎么办....
谢谢。
【问题讨论】:
-
作为一个额外的东西,结帐 openxml,它在 Excel 工作表和非常大的 Excel 工作表中也能很好地工作
标签: c# excel ms-jet-ace oledbdataadapter