【问题标题】:How to check SQLite DB integrity with Dapper in C#如何在 C# 中使用 Dapper 检查 SQLite DB 的完整性
【发布时间】:2018-12-12 04:10:30
【问题描述】:

我正在尝试使用 Dapper 和 SQLite 跟踪 C# 项目中的数据库损坏错误。所以我正在寻找一种方法来检查代码中的数据库完整性。我发现多个地方说我可以为此发送命令“PRAGMA integrity_check”,但是 Dapper Execute 函数只返回一个表示受影响的行数的 int,这在这里没有任何意义(而且似乎只是返回 0 )。

有没有办法进行这种完整性检查或类似的事情?

【问题讨论】:

    标签: c# sqlite dapper


    【解决方案1】:

    我不熟悉 Dapper,但如果您使用 SQLite 3.16.0 或更高版本,我认为您至少有 1 个选项。也许2。 从 3.16.0 版本开始,SQLite 有了一个新的实验功能,称为PRAGMA functions

    这实质上意味着现在您可以使用无副作用的内置PRAGMAs 作为表格。 例如,除了旧语法:

    PRAGMA integrity_check;
    

    现在您还可以像这样检查数据库完整性:

    SELECT integrity_check FROM pragma_integrity_check();
    

    或者:

    SELECT * FROM pragma_integrity_check();
    

    因此,如果您可以通过 Dapper 在任意表上运行任意 SELECTs,并访问它们的结果,那么就是这样。

    但是,如果您不能,并且您获得的唯一信息实际上只是受影响的行数,那么仍然有解决方案。您可以构造一个查询,如果 integrity_check 为“ok”则删除 1 行,如果不是,则删除 0 行:

    DROP TABLE IF EXISTS Dummy;
    CREATE TABLE Dummy as SELECT 'ok' as Value;
    DELETE FROM Dummy WHERE Value = (SELECT * FROM pragma_integrity_check());
    

    这在 SQLite 版本 3.25.3 上适用于我,但正如我所说,它只是一个实验性功能,仍会发生变化,版本之间的确切语法可能会或可能不会不同。

    【讨论】:

      猜你喜欢
      • 2011-10-08
      • 2013-08-06
      • 2011-05-16
      • 1970-01-01
      • 1970-01-01
      • 2011-03-09
      • 2011-07-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多