0

私はcsharp-sqliteライブラリを使用しています。

コード:

var conn = new SQLite.SQLiteConnection(DatabasePath);
conn.Execute("insert or replace into Option(Key, Value) values ('A', '1')");
conn.Execute("insert or replace into Option(Key, Value) values ('B', '2')");

期待どおりに動作します。ただし、BeginTransaction()とCommitを使用すると、2番目のExcuteで例外が発生します: "CannotOpen"、ネイティブはSQLITE_CANTOPEN(エラー14)です。

コードは次のようになります。

var conn = new SQLite.SQLiteConnection(DatabasePath);
try
{
  conn.BeginTransaction();
  conn.Execute("insert or replace into Option(Key, Value) values ('A', '1')");
  conn.Execute("insert or replace into Option(Key, Value) values ('B', '2')");
  conn.Commit();
}
catch (SQLiteException ex)
{
     _conn.Rollback();

}

私は何が間違っているのですか?

ありがとうございました

4

3 に答える 3

2

私が見た例から、すべてがCSharp-Sqliteを使用しているわけではありませんが、次のように使用する必要があります。

using(var conn = new SQLite.SQLiteConnection(DatabasePath)) 
{
  conn.Open();
  using(var tr = conn.BeginTransaction())
  {
    try
    {
      using(var cmd = conn.CreateCommand())
      {
        cmd.Transaction = tr;
        cmd.CommandText = @"insert or replace into Option(Key, Value) 
                              values ('A', '1')";
        cmd.ExecuteNonQuery();
        cmd.CommandText = @"insert or replace into Option(Key, Value) 
                              values ('B', '2')";
        cmd.ExecuteNonQuery();
      }
      tr.Commit();
    }
    catch (SQLiteException ex)
    {
      tr.Rollback();
    }
  }
  conn.Close();
}

これはそれらの例の1つです

于 2013-01-22T22:07:14.320 に答える
2

WinRT用のSQLite(デフォルトのSQLiteパッケージではなく)とsqlite-netのSQLite非同期ラッパーを使用する必要があると思います。Windows 8ではファイルIOインターフェイスが変更されたため、ネイティブDLLがそれらを使用しようとすると例外が発生します。

非同期ラッパーの使用方法のウォークスルーについては、こちらをご覧ください:http: //blog.thomaslebrun.net/2012/10/windows-8-using-sqlite-in-your-windows-store-application/

于 2013-01-22T22:16:31.707 に答える
2

WinRTで実行しているときにこの問題が発生しました。

このプラグマは問題を修正します:

using(var connection = new SQLiteConnection(dbPath))
{
   connection.Execute(string.Format("PRAGMA temp_store_directory = '{0}';", Windows.Storage.ApplicationData.Current.TemporaryFolder.Path));
}

http://sqlite.1065341.n5.nabble.com/Transaction-issues-with-WinRT-build-td63817.htmlを参照して ください

于 2013-02-06T21:30:21.553 に答える