OledbConnection关闭和/或处理非常慢,需要20秒才能执行

时间:2016-07-05 21:03:43

标签: c# asp.net database excel oledbconnection

使用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;';"

我注意到一个非常奇怪的事情是,对于每种类型的excel文件EXCEPT .xls文件(来自1997-2003时代的Excel),连接需要很长时间才能关闭。

除此之外,我在互联网上到处搜索,实际上找不到任何找到解决方案的人,只有未解决的论坛帖子。以下是我从具有相同问题的人那里找到的一些链接:

OleDbConnection close method taking long execution time

OleDbConnection Dispose very slow (2s)

http://forums.asp.net/t/2059359.aspx?OledbConnection+Close+taking+too+long+to+execute

2 个答案:

答案 0 :(得分:1)

关闭与Access数据库的OLE DB连接时,我遇到了类似的性能问题。来自相关问题的建议解决了该问题:将以下内容添加到连接字符串:

OLE DB Services=-1;

我无法用Excel工作簿重现该问题,但这可能也适用于这些工作。

答案 1 :(得分:0)

对不起,我没有足够的声誉来发表评论,但我想把我的两分钱放在这里。

我面临着OleDbConnection永远关闭的同一问题。就我而言,这是因为我错误地使用了嵌套using。解决这些嵌套的using后,我的问题解决了。

希望它对像我这样的新手有所帮助。