在使用OleDbConnection访问excel文件的工作表名称时,我遇到了一个问题。代码中的所有内容都执行良好且正常工作,直到 OleDbConnection 在 using 语句结束时关闭。这会导致程序停止 15-20 秒或更长时间!
我尝试摆脱 using 语句并单独使用 OleDbConnection.Close() 和 OleDbConnection.Dispose() 方法,这两种方法都需要非常长的时间来执行。如果我从不关闭连接,程序将完美运行。
//Closing connection is inredibly slow now for some reason
using (OleDbConnection conn = new OleDbConnection(connectString))
{
conn.Open();
DataTable dbSchema = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
sheetNames.Clear();
for (int i = 0; i < dbSchema.Rows.Count; i++)
{
sheetNames.Add(dbSchema.Rows[i]["TABLE_NAME"].ToString());
}
comboBox1.Items.Clear();
comboBox1.Items.AddRange(sheetNames.ToArray());
comboBox1.SelectedIndex = 0;
//conn.Close();
}
//Connection strings
//XLS
connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0}; Extended Properties='Excel 8.0;HDR=No;IMEX=1;';" />
//XLSX
connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0}; Extended Properties='Excel 12.0;HDR=No;IMEX=1;';"
我注意到的一件非常奇怪的事情是,除了.xls文件(从 1997-2003 时代 Excel)之外,每种类型的 excel 文件都需要很长时间才能关闭连接。
最重要的是,我在互联网上到处搜索,实际上找不到任何找到解决方案的人,只有未解决的论坛帖子。以下是我从有相同问题的人那里找到的一些链接:
OleDb连接关闭方法执行时间长,
OleDb连接 处理速度非常慢(2 秒)
http://forums.asp.net/t/2059359.aspx?OledbConnection+Close+taking+too+long+to+execute
关闭与 Access 数据库的 OLE DB 连接时,我遇到了类似的性能问题。相关问题的建议解决了该问题:将以下内容添加到连接字符串:
OLE DB Services=-1;
我无法重现 Excel 工作簿的问题,但这也可能适用于这些工作簿。
两年后,Gurch的回应帮助了我。谢谢。
我的应用使用 OleDb 连接器访问数据库文件。
我确实需要修改稍后打开数据库文件的方式以计算校验和。
using (var fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
FileShare.ReadWrite似乎是关键,以前使用的是System.IO.File.OpenRead。