次のコードを使用して、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
ます。 - アプリケーションを終了します。
再接続を試みるまでに接続が切断されているはずなのに、なぜこのエラーが発生するのですか?