C# sqlite数据库锁定错误
在我的c#应用程序中,我使用的是sqlite数据库。我的c#应用程序作为服务在另一台机器上运行。我从本地机器执行CRUD操作,以对我们开发的flex应用程序的数据库执行CRUD操作。 现在的问题是,当我尝试从前端删除或向数据库中添加项目时,有时由于数据库被锁定而出现错误。请查找下面用于删除数据的代码段 连接字符串C# sqlite数据库锁定错误,c#,sqlite,C#,Sqlite,在我的c#应用程序中,我使用的是sqlite数据库。我的c#应用程序作为服务在另一台机器上运行。我从本地机器执行CRUD操作,以对我们开发的flex应用程序的数据库执行CRUD操作。 现在的问题是,当我尝试从前端删除或向数据库中添加项目时,有时由于数据库被锁定而出现错误。请查找下面用于删除数据的代码段 连接字符串 public ThingzDatabase(string dataFile) { _dataFile = dataFile;
public ThingzDatabase(string dataFile)
{
_dataFile = dataFile;
conn = new SQLiteConnection("data source=" + dataFile+";Version=3;");
}
对于执行命令,使用以下方法
public SQLiteDataReader ExecuteSQL(String sqlExpr)
{
if (conn.State != ConnectionState.Open)
Open(DataFile);
SQLiteCommand cmd = conn.CreateCommand();
cmd.CommandText = sqlExpr;
cmd.CommandType = CommandType.Text;
return cmd.ExecuteReader();
}
public int ExecuteNonQuerySQL(String sqlExpr)
{
if (conn.State != ConnectionState.Open)
Open(DataFile);
int ireturn = 0;
using (SQLiteTransaction dbtrans = conn.BeginTransaction())
{
SQLiteCommand cmd = conn.CreateCommand();
cmd.CommandText = sqlExpr;
ireturn = cmd.ExecuteNonQuery();
dbtrans.Commit();
}
return ireturn;
}
下面是用于删除关系的代码
OrderedRelationSet orderedRelationSet = new OrderedRelationSet(SessionDatabase, relation.RelationTypeId, relation.SourceThingId);
public OrderedRelationSet(ThingzDatabase db, int relationTypeId, int parentItemId)
{
this.db = db;
this.relationTypeId = relationTypeId;
this.parentItemId = parentItemId;
childId = ThingzDatabase.thingsId;
relations = new List<Relation>();
SQLiteDataReader relationsReader = db.ExecuteSQL(
@"SELECT *
FROM relation
WHERE parent_itemid = " + this.parentItemId.ToString() + @" and child_itemid=" + childId + @" and
relation_typeid = " + this.relationTypeId.ToString()
);
while (relationsReader.Read())
{
Relation relation = new Relation();
relation.db = db;
relation.SourceThingId = Convert.ToInt32(relationsReader["parent_itemid"]);
relation.ThingId = Convert.ToInt32(relationsReader["child_itemid"]);
relation.Id = Convert.ToInt32(relationsReader["id"]);
relation.RelationTypeId = Convert.ToInt32(relationsReader["relation_typeid"]);
relation.ordinal = Utilities.OptionalIntFieldFromSQLReader("ordinal", relationsReader);
relation.thingIsChild = true;
relations.Add(relation);
}
relationsReader.Close();
reorder();
}
这是我的代码…请让我知道什么是解决这个锁问题的解决方案。
Thakx提前
}
}据我所知,SQLite一次只能处理一次写入,但可以同时处理多个读取 有时我会因为数据库被锁定而出错 当在同一时间有同时写入时 你可以查一下
case "remove":
try
{
if (orderedRelationSet.RemoveRelation(relation) != true)
{
TouchServer.Log(Logger.MessageType.Error, 0, "Remove relation operation failed");
throw new Exception("remove relation failed");
}
}
catch (Exception)
{
if (orderedRelationSet.RemoveRelation(relation) != true)
{
TouchServer.Log(Logger.MessageType.Error, 0, "Remove relation operation failed");
throw new Exception("remove relation failed");