2017-11-10 289 views
0

我有以下代码:数据库被锁定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(); 
} 

它总是返回一个错误:在Database is locked行:

int rows = sqCommand.ExecuteNonQuery(); 

WHU不会发生?

+0

请发表你的'sql'变量的值。 – wdosanjos

回答

2

我敢打赌,数据库连接是离开的时候sqCommand.ExecuteNonQuery()方法执行开放的地方(这锁仍适用于以前的连接),因此你需要通过包装SQLiteConnection实例与using语句块这样的重构:

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 
    } 
} 

参考:

Writing to a database file

+0

我会尝试,并在这里回应 – OPV

+0

它仍然给我错误:数据库是锁 – OPV

+0

你能分享如何使用这个选择查询的例子吗? – OPV