Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/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# 数据库在insert语句上被锁定_C#_Database_Sqlite - Fatal编程技术网

C# 数据库在insert语句上被锁定

C# 数据库在insert语句上被锁定,c#,database,sqlite,C#,Database,Sqlite,我在尝试插入sqlite数据库时遇到问题。我有两张像这样的桌子: CREATE TABLE user(UId INTEGER PRIMARY KEY ASC AUTOINCREMENT ,name VARCHAR(100) UNIQUE,phoneNumber INTEGER UNIQUE); 及 我可以插入到用户表中,而不会出现以下问题: INSERT INTO user (name, phoneNumber) VALUES(@name,@phoneNumber) public v

我在尝试插入sqlite数据库时遇到问题。我有两张像这样的桌子:

CREATE TABLE user(UId INTEGER PRIMARY KEY ASC AUTOINCREMENT ,name VARCHAR(100) UNIQUE,phoneNumber INTEGER UNIQUE);

我可以插入到用户表中,而不会出现以下问题:

INSERT INTO user (name, phoneNumber) VALUES(@name,@phoneNumber)
    public void Add(Transaction trans,User user)
    {
        _conn.Open();
        string SQL = "INSERT INTO 'transaction' (loan, trackUser) VALUES(@loan,@userID);";
        string checkUserSQL = "SELECT EXISTS(SELECT 1 FROM user WHERE UId = @UId) LIMIT 1;";
        SQLiteCommand checkUserCommand = new SQLiteCommand(checkUserSQL,_conn);
        checkUserCommand.Parameters.Add(new SQLiteParameter("@UId", user.UId));
        var reader = checkUserCommand.ExecuteReader();
        reader.Read();
        var check = reader.GetBoolean(0);
        if (!check)
        {
            throw new UserDoesNotExcistException();
        }
        SQLiteCommand transCommand = new SQLiteCommand(SQL, _conn);
        transCommand.Parameters.Add(new SQLiteParameter("@loan",trans.Loan));
        transCommand.Parameters.Add(new SQLiteParameter("@userID",user.UId));
        transCommand.ExecuteNonQuery();
        _conn.Close();
    }
但当我尝试添加事务时,我的数据库被锁定。我是这样做的:

INSERT INTO user (name, phoneNumber) VALUES(@name,@phoneNumber)
    public void Add(Transaction trans,User user)
    {
        _conn.Open();
        string SQL = "INSERT INTO 'transaction' (loan, trackUser) VALUES(@loan,@userID);";
        string checkUserSQL = "SELECT EXISTS(SELECT 1 FROM user WHERE UId = @UId) LIMIT 1;";
        SQLiteCommand checkUserCommand = new SQLiteCommand(checkUserSQL,_conn);
        checkUserCommand.Parameters.Add(new SQLiteParameter("@UId", user.UId));
        var reader = checkUserCommand.ExecuteReader();
        reader.Read();
        var check = reader.GetBoolean(0);
        if (!check)
        {
            throw new UserDoesNotExcistException();
        }
        SQLiteCommand transCommand = new SQLiteCommand(SQL, _conn);
        transCommand.Parameters.Add(new SQLiteParameter("@loan",trans.Loan));
        transCommand.Parameters.Add(new SQLiteParameter("@userID",user.UId));
        transCommand.ExecuteNonQuery();
        _conn.Close();
    }

select语句,用于检查用户exicst在运行时是否没有问题,但在
transCommand.ExecuteNonQuery()时是否有问题数据库被锁定。我是否以错误的方式绑定了forign密钥,或者为什么我的数据库被锁定?

在同一连接上启动另一个读卡器之前,您应该先关闭上一个读卡器。尝试在检查后插入一个
读卡器.Close()
,并记住也要关闭
transCommand
读卡器。您真的应该使用
语句将它们包装在
中,以使事情更整洁,减少对资源清理的担忧。不过,transCommand不是一个阅读器吗?我已经尝试在创建transcommand之前添加reader.close,但是它仍然被锁定。您得到的错误到底是什么?它总是在第一次运行此方法时,还是在您已经运行过一次之后
transCommand
仍然是一个需要关闭的命令对象。但我似乎在transCommand上找不到关闭命令?确切的错误是:“System.Data.SQLite.dll中发生了类型为'System.Data.SQLite.SQLiteException'的未经处理的异常。其他信息:数据库已锁定”您是对的,我以为您正在运行执行读取器。您是否通过不处理或关闭命令对象或连接而将其锁定在其他位置?如何打开连接(连接字符串)?