c# - Win RT SQLite 事务性插入

标签 c# sqlite windows-runtime

我正在开发一个 Win 8 RT 应用程序,该应用程序必须将一些数据从 Web 服务合并到本地 SQLite 数据库,并且我已经实现了这种方法来仅在事务中更新数据库。

int result;

                await MyDatabaseManager.Connection.RunInTransactionAsync(async (connection) =>
                {
                    foreach (Hotel _hotel in listUpdates)
                    {
                        result = await connection.UpdateAsync(_hotel);

                        if (result == 0)
                        {
                            await MyDatabaseManager.Connection.InsertAsync(_hotel);
                        }
                    }

                });

但是,我不知道为什么,当调用 await connection.UpdateAsync(_hotel); 时,它会中断 for bucle,并退出函数而不抛出任何异常或返回任何错误。

如果我评论 RunInTransactionAsync 行,一切正常。

有什么想法吗??

提前致谢。

最佳答案

library you're using没有最好的 async支持(参见 should I expose asynchronous wrappers for synchronous methods 了解该方法存在缺陷的原因)。

您需要使用 RunInTransactionAsync(Action<SQLiteConnection>)重载而不是 RunInTransactionAsync (Action<SQLiteAsyncConnection>) .应该这样做(在升级到最新版本的 sqlite-net 之后):

await MyDatabaseManager.Connection.RunInTransactionAsync((SQLiteConnection connection) =>
{
  foreach (Hotel _hotel in listUpdates)
  {
    result = connection.Update(_hotel);

    if (result == 0)
    {
      connection.Insert(_hotel);
    }
  }
});

关于c# - Win RT SQLite 事务性插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12002034/

相关文章:

c# - 当我尝试使用自定义服务器控件(在 App_Code 目录中)时全局命名空间出现问题

android - 计算过去 60 分钟的所有值

sqlite - SQLite 中的多个更新触发器

javascript - 如何将Javascript连接到Python以两种方式共享JSON格式的数据?

wpf - 如何在 WPF 窗口中使用 WinRT SwapChainPanel 控件?

c# - 如何使用工厂模式实现每个请求/线程的数据上下文

c# - 如何在提交操作时编辑 MS Bot Framework Adaptive Card

c# - 如何在悬停时更改 gridview 内部可用控件的工具提示的背景颜色

c# - 在页面之间导航期间显示 Progressring

c# - WinRT : How do I ensure Images are drawn in a pixel-perfect way on a Canvas?