为什么我在多次更新Excel单元格时会收到OleDbException异常?

3
我正在使用以下代码来更新Excel文件中的单元格。
public bool WriteChange(string Filename, string SheetName, string Cell, string Value)
{
    if(!System.IO.File.Exists(Filename))
    {
        throw new System.IO.FileNotFoundException("File \"" + Filename + "\" could not be found");
    }
    bool result = false;
    string ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Filename + ";Mode=ReadWrite;Extended Properties=\"Excel 8.0;HDR=NO;\"";
    string SQL = "UPDATE [" + SheetName + Cell + ":" + Cell + "] SET F1='" + Value + "'";

    using(OleDbConnection Connection = new OleDbConnection(ConnectionString))
    {
        Connection.Open();
        using(OleDbCommand cmd = new OleDbCommand(SQL,Connection))
        {
            int value = cmd.ExecuteNonQuery();
            if(value > 0)
            {
                result = true;
            }
        }
    }
    return result;
}

这个函数可以正常工作,除非我尝试多次更新同一个单元格。一旦使用此函数更新了单元格,就再也不能使用此函数更新该单元格。如果我尝试再次更新单元格,即使重新启动应用程序,也会出现“OleDbException:System Resource Exceeded”异常。

我知道如果您正在创建与电子表格的大量连接(例如在循环中),则通常会收到此异常,但是我每次运行应用程序时只连接一次。 典型的工作流程如下:

  • 启动应用程序。
  • 调用WriteChange
  • 退出应用程序。

为什么当我再次尝试连接时,连接应该已经不存在了,却会收到此错误?


也许这可以帮助你:https://dev59.com/k0XRa4cB1Zd3GeqPrF6I - Brijesh Mishra
正如我在问题中所述,如果我正在创建一堆连接,我会期望出现这个异常。然而,在我的情况下,我只创建了一个连接。@BrijeshMishra - Tester101
这是一个Web应用程序吗?如果不是,请尝试在其他机器上运行它以排除驱动程序问题。 - Brijesh Mishra
非常奇怪。我完全复制了你的代码,但在同一单元格中多次写入时却没有任何问题。我使用的是VS2010、Windows 7、Excel 2010,并将工作簿保存为2003(.xls)格式。 - Stewbob
@Stewbob 奇怪。我使用了另一个电子表格,也无法复制这个问题。一定是某种方式破坏了电子表格。 - Tester101
2个回答

0

使用以下连接字符串,因为Microsoft.Jet.OLEDB.4.0存在此错误。

string ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + @Filename + ";Extended Properties=\"Excel 12.0;HDR=No;\"";

0

我认为错误可能是因为您没有关闭OleDbconnection连接造成的。 在完成更新查询后,请关闭您的Dbconnection -- `int value = cmd.ExecuteNonQuery();


他正在使用代码块创建连接,因此当它超出作用域时,连接将被关闭。 - Romil Kumar Jain

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接