数据库已锁定sqCommand.ExecuteNonQuery()? [英] Database is locked sqCommand.ExecuteNonQuery()?

查看:123
本文介绍了数据库已锁定sqCommand.ExecuteNonQuery()?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下代码:

string sql = String.Format("insert into {0}({1}) values({2});", tableName, columns, values);
SQLiteConnection myConn = null;
try 
{
    myConn = new SQLiteConnection(dbConnection);
    myConn.Open();

    using(SQLiteCommand sqCommand = new SQLiteCommand(sql, myConn))
    {
        sqCommand.CommandText = sql;
        int rows = sqCommand.ExecuteNonQuery();
        return !(rows == 0);
    }
} 
finally 
{
    myConn.Close();
}

它总是返回错误:数据库已锁定所在行:

It returns always an error: Database is locked in line:

int rows = sqCommand.ExecuteNonQuery();

会发生什么?

推荐答案

我敢打赌,当执行 sqCommand.ExecuteNonQuery()方法(该锁仍适用于先前的连接)时,数据库连接将保持打开状态,因此,您需要通过使用语句块将每个 SQLiteConnection 实例包装起来来进行重构,如下所示:

I bet the database connection is left open somewhere when sqCommand.ExecuteNonQuery() method executed (which the lock still apply for previous connection), hence you need to refactor by wrapping every SQLiteConnection instance with using statement block like this:

string sql = String.Format("insert into {0}({1}) values({2});", tableName, columns, values);
using (SQLiteConnection myConn = new SQLiteConnection(dbConnection))
{
    try
    {
        myConn.Open();

        using (SQLiteCommand sqCommand = new SQLiteCommand(sql, myConn))
        {
            sqCommand.CommandText = sql;
            int rows = sqCommand.ExecuteNonQuery();
            return !(rows == 0);
        }
    }
    catch (Exception e)
    {
        // do exception handling
    }
}

参考:

写入数据库文件

这篇关于数据库已锁定sqCommand.ExecuteNonQuery()?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆