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.

スプレッドシートへの多数の接続を (たとえばループで) 作成している場合、通常、この例外が発生することはわかっていますが、アプリケーションの実行ごとに 1 回しか接続していません。典型的なワークフローは次のとおりです。

  • アプリケーションを開始します。
  • コールしWriteChangeます。
  • アプリケーションを終了します。

再接続を試みるまでに接続が切断されているはずなのに、なぜこのエラーが発生するのですか?

4

2 に答える 2

0

OleDbconnection 接続を閉じていないため、エラーが発生した可能性があると思います。更新クエリが完了したら、Dbconnection を閉じます -- `int value = cmd.ExecuteNonQuery();

于 2012-05-01T10:30:26.240 に答える
0

Microsoft.Jet.OLEDB.4.0 にこのエラーがあるため、次の接続文字列を使用します。

string ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + @Filename + ";Extended Properties=\"Excel 12.0;HDR=No;\"";
于 2012-05-01T10:22:29.910 に答える