Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# sqlite数据库锁定错误_C#_Sqlite - Fatal编程技术网

C# sqlite数据库锁定错误

C# sqlite数据库锁定错误,c#,sqlite,C#,Sqlite,在我的c#应用程序中,我使用的是sqlite数据库。我的c#应用程序作为服务在另一台机器上运行。我从本地机器执行CRUD操作,以对我们开发的flex应用程序的数据库执行CRUD操作。 现在的问题是,当我尝试从前端删除或向数据库中添加项目时,有时由于数据库被锁定而出现错误。请查找下面用于删除数据的代码段 连接字符串 public ThingzDatabase(string dataFile) { _dataFile = dataFile;

在我的c#应用程序中,我使用的是sqlite数据库。我的c#应用程序作为服务在另一台机器上运行。我从本地机器执行CRUD操作,以对我们开发的flex应用程序的数据库执行CRUD操作。 现在的问题是,当我尝试从前端删除或向数据库中添加项目时,有时由于数据库被锁定而出现错误。请查找下面用于删除数据的代码段

连接字符串

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");