私はasp.net c#を使用していて、SqLiteデータベースをサーバーにアップロードしてから、挿入と更新を行います。問題は、データベースがロックされることがある(時々、それが更新されているかどうかに間違っていると思う)ことです。次回にファイルをアップロードしようとすると、ロックされ、「別のプロセスで使用されているため、プロセスはファイルにアクセスできません」というエラーが表示されます。トランザクション中に何か問題が発生した場合、データベースファイルが破棄されないことがありますか?この問題を解決する唯一の方法は、サーバーを再起動することです。Sqliteデータベースがロックされました
私のコードでどのように解決できますか?何か問題が発生しても常にロックされていることを確認できますか?
これは私のコードです:
try
{
string filepath = Server.MapPath("~/files/db.sql");
//Gets the file and save it on the server
((HttpPostedFile)HttpContext.Current.Request.Files["sqlitedb"]).SaveAs(filepath);
//Open the database
SQLiteConnection conn = new SQLiteConnection("Data Source=" + filepath + ";Version=3;");
conn.Open();
SQLiteCommand cmd = new SQLiteCommand(conn);
using (SQLiteTransaction transaction = conn.BeginTransaction())
{
using (cmd)
{
//Here I do some stuff to the database, update, insert etc
}
transaction.Commit();
}
conn.Close();
cmd.Dispose();
}
catch (Exception exp)
{
//Error
}
スレッドを使用していますか? –
どのようにスレッド?私のasp.netコードでは、sqliteのコードではわからないが、私はそうは思わない? –
明示的に作成していない場合でも、asp.netはマルチスレッドです。他のユーザーからのリクエストをasp.netがどのように処理できるのでしょうか? sqlite dbを変更すると、完全なdbがロックされます。あなたはsqliteでマルチスレッドの読み込みを行うことができますが、書き込み(挿入、更新、削除、テーブル作成)はデータベース全体をロックします。あなたは.net readerwriter-lockクラスを使わなければならないと思います。 – tuinstoel