【发布时间】:2009-07-23 01:50:54
【问题描述】:
我正在使用 asp.net c# 并将 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 数据库时,整个数据库被锁定。您可以使用 sqlite 进行多线程读取,但写入(插入、更新、删除、创建表)会锁定整个数据库。我认为您必须使用 .net readerwriter-lock 类。