3

私のサーバーアプリケーション(C#で書かれた)では、複数のリクエストが同時に来て、サーバーはsqlite dbで読み取りと書き込みの両方の操作を行います。

ここでの問題は、他のリクエストがデータベースからの読み取り中にサーバーがデータベースに何かを挿入しようとしたときにtransaction.Commit()database is locked発生し、例外がスローExecuteNonQuery()されますが、正常に実行されます。したがって、問題はデータベースへのコミットのみです。

すべての挿入および更新クエリの後にコミットしています。一度コミットするだけでこの問題を回避できますか (データベースをメモリに保持し、アプリケーションを閉じてコミットします)? または、この状況を処理する他の方法があります。

4

1 に答える 1

1

Busy CallbackまたはBusy Timeoutを実装する必要があるようです。SQL lite は、書き込み時にデータベース全体をロックする必要があります。

複数のプロセスが同時に同じデータベースを開くことができます。複数のプロセスが同時に SELECT を実行できます。ただし、いつでもデータベースに変更を加えることができるプロセスは 1 つだけです。

複数のアプリケーションまたは同じアプリケーションの複数のインスタンスが、1 つのデータベース ファイルに同時にアクセスできますか?

于 2013-07-31T12:22:38.897 に答える