如何使用SQLite.Net设置多个PRAGMA?

时间:2016-10-08 08:59:40

标签: c# sqlite uwp windows-10

打开与数据库的连接后,我可以设置一个PRAGMA,但第二个总是失败。如何使用SQLite.Net-PCL 3.1.1设置这两个PRAGMA?这适用于通用Windows平台应用程序。

    public static SQLiteConnection Open()
    {
        if (db == null)
        {
            var dbPath = Path.Combine(ApplicationData.Current.LocalFolder.Path, DatabaseFileName);
            db = new SQLiteConnection(new SQLite.Net.Platform.WinRT.SQLitePlatformWinRT(), dbPath);
            db.Execute("PRAGMA foreign_keys = ON");
            db.Execute("PRAGMA journal_mode = WAL");
        }
        return db;
    }

我得到一个" Row"第二个执行语句后紧接着SQLite的异常。

请求堆栈跟踪:

  • 在SQLite.Net.SQLiteCommand.ExecuteNonQuery()
  • at SQLite.Net.SQLiteConnection.Execute(String query,Object [] args)
  • 在SceneLocker.Models.DBConnection.Open()

编辑:添加被困异常的屏幕截图:

Trapped Exception

1 个答案:

答案 0 :(得分:3)

  

我在第二个执行语句后立即从SQLite获得“Row”异常。

“行”异常表示语句返回一行结果,db.Execute不支持。

作为一种变通方法,您可以使用db.CreateCommand来执行该语句:

var dbPath = Path.Combine(ApplicationData.Current.LocalFolder.Path, "MyDB.db");
db = new SQLiteConnection(new SQLite.Net.Platform.WinRT.SQLitePlatformWinRT(), dbPath);
db.Execute("PRAGMA journal_mode=DELETE");
var cmd=db.CreateCommand("PRAGMA journal_mode=WAL",new object[] { });//use db.CreateCommand
var result=cmd.ExecuteQuery<object>();//execute the command