【问题标题】:C# - Sqlite - Error lock databaseC# - Sqlite - 错误锁定数据库
【发布时间】:2017-10-30 16:42:14
【问题描述】:

我需要帮助:我的代码中有两种方法——一种用于插入数据,一种用于更新数据——我首先调用“插入方法”,第二次调用“更新方法”,但是,在第二种情况下,我收到“锁定数据库错误”。

方法如下:

  private bool mappingFileInDB(string numRep, string siglaNot, string annoPrat, string ErrorImporting, string fishedOut)
  {
        using (SQLiteConnection sqlite_conn = new SQLiteConnection("Data Source=" + pathProjectDir + @"\db\db.dat;"))
        {
            sqlite_conn.Open();
            using (SQLiteCommand insertSQL = new SQLiteCommand("INSERT INTO working_table (numero_repertorio, sigla_notaio, codice_pratica, anno_cartella, is_file_imported, if_error_importing, is_file_glyphed, is_cc_in_outFolder, is_td_in_toSignFolder, is_td_signed, is_td_in_signedFolder, is_td_in_notaroFolder, is_fishedOut ) VALUES (@1,@2,@3,@4,@5,@6,@7,@8,@9,@10,@11,@12,@13)", sqlite_conn))
            {
                insertSQL.Parameters.Add(new SQLiteParameter("@1", numRep));
                insertSQL.Parameters.Add(new SQLiteParameter("@2", siglaNot));
                insertSQL.Parameters.Add(new SQLiteParameter("@3", ""));
                insertSQL.Parameters.Add(new SQLiteParameter("@4", annoPrat));
                insertSQL.Parameters.Add(new SQLiteParameter("@5", "0"));
                insertSQL.Parameters.Add(new SQLiteParameter("@6", ErrorImporting));
                insertSQL.Parameters.Add(new SQLiteParameter("@7", "0"));
                insertSQL.Parameters.Add(new SQLiteParameter("@8", "0"));
                insertSQL.Parameters.Add(new SQLiteParameter("@9", "0"));
                insertSQL.Parameters.Add(new SQLiteParameter("@10", "0"));
                insertSQL.Parameters.Add(new SQLiteParameter("@11", "0"));
                insertSQL.Parameters.Add(new SQLiteParameter("@12", "0"));
                insertSQL.Parameters.Add(new SQLiteParameter("@13", fishedOut));
                try
                {
                    insertSQL.ExecuteNonQuery();
                }
                catch (Exception ex)
                {
                    return false;
                }
                finally
                {
                    sqlite_conn.Close();
                    sqlite_conn.Dispose();
                }
            }

        }
        GC.Collect();
        return true;
 }

 public bool updateFileInDB(string nameColumn, string newVal, string numRep, string siglaNot)
    {
        using (SQLiteConnection sqlite_conn = new SQLiteConnection("Data Source=" + pathProjectDir + @"\db\db.dat;"))
        {
            sqlite_conn.Open();
            using (SQLiteCommand updateSQL = new SQLiteCommand("UPDATE working_table SET " + nameColumn + " = @val WHERE numero_repertorio = @nR AND sigla_notaio = @sN", sqlite_conn))
            {
                updateSQL.Parameters.Add(new SQLiteParameter("@val", newVal));
                updateSQL.Parameters.Add(new SQLiteParameter("@nR", numRep));
                updateSQL.Parameters.Add(new SQLiteParameter("@sN", siglaNot));

                try
                {
                    updateSQL.ExecuteNonQuery();
                }
                catch (Exception ex)
                {
                    return false;
                }
                finally
                {
                    sqlite_conn.Close();
                    sqlite_conn.Dispose();
                }
            }
        }
        GC.Collect();
        return true;
    }

这里的错误:

Error screenshot

PS:如果我多次调用 insert 方法,它可以正常工作;如果我只调用更新方法 - 之前没有插入一些东西 - 它可以工作;仅当我首先调用 insert 方法和第二次调用 update 方法时,它才起作用。

我不明白问题出在哪里!

【问题讨论】:

    标签: c# sqlite insert sql-update database-locking


    【解决方案1】:

    现在可以了!我改变了这个:

    insertSQL.ExecuteNonQuery();
    

    用这个:

    insertSQL.ExecuteScalar();
    

    并且工作正常!

    谁能告诉我为什么?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-09
      • 2018-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-21
      • 2013-04-18
      相关资源
      最近更新 更多