【问题标题】:How to set multiple PRAGMAs using SQLite.Net?如何使用 SQLite.Net 设置多个 PRAGMA?
【发布时间】:2017-02-17 05:44:19
【问题描述】:

打开与数据库的连接后,我可以设置一个 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;
    }

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

请求的堆栈跟踪:

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

编辑:添加捕获异常的屏幕截图:

【问题讨论】:

  • 感谢您对实际的错误消息保密。
  • 异常内容只是说“Row”。
  • 你是在暗示你得到一个只有“行”这个词的空白屏幕吗?
  • 编辑是一种改进,但总的来说,尽量避免图片。其中的文字无法用谷歌搜索。请添加该堆栈跟踪的全文。

标签: c# sqlite uwp windows-10


【解决方案1】:

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

“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

【讨论】:

  • 非常感谢!
  • 我将此标记为答案,因为它让我知道第二个 Execute 语句正在返回结果。我用 ExecuteScalar 替换了第二个 Execute,它就像一个魅力。
猜你喜欢
  • 1970-01-01
  • 2012-03-29
  • 2016-10-14
  • 2011-05-30
  • 2012-04-15
  • 1970-01-01
  • 1970-01-01
  • 2012-02-17
  • 1970-01-01
相关资源
最近更新 更多