在 SQLite-WinRT 包装器中使用“更新”或“删除”查询获取受影响的行数

Posted

技术标签:

【中文标题】在 SQLite-WinRT 包装器中使用“更新”或“删除”查询获取受影响的行数【英文标题】:Get number of rows affected using 'Update' or 'Delete' query in SQLite-WinRT wrapper 【发布时间】:2016-06-05 12:59:43 【问题描述】:

如何获取 SQLite-WinRT 包装器中影响删除或更新查询的行数?这是描述 Windows 运行时应用程序中 SQLite-WinRT 包装器的 CRUD 操作的blog。

一些代码sn-p是:

var dbFile = await StorageFile.GetFileFromPathAsync(dbPath);
db = new SQLiteWinRT.Database(dbFile);
await db.OpenAsync(SqliteOpenMode.OpenReadWrite);
await db.ExecuteStatementAsync("DELETE FROM Customer WHERE Name = 'abc'");

谢谢!

【问题讨论】:

【参考方案1】:

SQLite-WinRT 代码库不使用sqlite3_changes()sqlite3_total_changes() 这两种SQLite 提供的函数来计算受影响的记录,因此似乎没有直接的API 来获取该数字。

但是 SQLite 具有 changes() 函数,因此您可以尝试在 DELETE 之后发出 SELECT CHANGES() 查询并读取返回值(使用 db.PrepareStatementAsyncstmt.StepAsyncstmt.GetIntAt)。

(目前无法测试这种方法)。

【讨论】:

啊,我明白了。谢谢。我会尝试这种方法并让你知道。一个问题:假设连续有 DELETEUPDATE 查询并一一执行。 SELECT CHANGES() 查询是否仅返回 UPDATE 查询产生的受影响行数? 返回最近完成的 INSERT、UPDATE 或 DELETE 语句修改、插入或删除的行数【参考方案2】: 您可以计算受 cmd.ExecuteNonQuery() 影响的行数,如下所示
int rowCount = Convert.ToInt32(cmd.ExecuteNonQuery());
行数将不包含因插入或更新而受影响的行数

【讨论】:

以上是关于在 SQLite-WinRT 包装器中使用“更新”或“删除”查询获取受影响的行数的主要内容,如果未能解决你的问题,请参考以下文章

如何在Java包装器中使用Opencv的分区功能

在 Swift 属性包装器中公开字典

OpenGL 包装器中的 Alpha/纹理问题

如何在 API 中隐藏迭代器以使用 std::map 包装器中的项目

使用 Next.js 摆脱 redux 包装器中的控制台日志

如何在 SWIG 生成的 Go 包装器中添加导入语句