sqlite - db.RunInTransaction 是否总是需要一种方法来检查或处理回滚?

标签 sqlite xamarin xamarin.forms

我接管的应用有这段代码:

   db.RunInTransaction(() =>
   {
      foreach (CategorySource category in categories)
      {
         db.Insert(category);
      }
      Console.Out.WriteLine("Categories: \r\n {0}", categories.Count);
   }); db.Commit();

如果没有办法处理或检查是否有回滚,谁能告诉我在事务中运行它有什么好处?

最佳答案

对于您向我们展示的示例,即执行单个插入,如果不可能捕获异常和回滚,我认为在事务中执行此操作没有任何好处。然而,更可能的意图是创建一种简单的方法来执行多个 SQL 命令,例如在单个事务中进行多次插入。如果您的代码希望从数据库的其他观察者的角度来看以原子方式进行这些插入,那么在那里使用事务是有意义的。即使没有回滚的机会,这也是正确的,前提是您相当确定/不担心可能不会发生故障。

来自sqlite-net documentation , 有一种方法可以回滚,但你需要使用低级 API,例如

db.BeginTransaction ();
try {
    foreach (CategorySource category in categories)
    {
        db.Insert(category);
    }
    Console.Out.WriteLine("Categories: \r\n {0}", categories.Count);
    db.Commit ();
}
catch (Exception) {
    db.Rollback ();
    throw;
}

关于sqlite - db.RunInTransaction 是否总是需要一种方法来检查或处理回滚?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41009327/

相关文章:

Xamarin.Forms 将程序集捆绑为 native 代码

mvvm - 绑定(bind)到 View 模型 xamarin.forms 中的属性

Xamarin.Forms 按钮 : Flash Color on Press

sqlite - SQLite有扩展函数库吗?

android - Android SQLiteDatabase.openDatabase() 可以用来打开远程sqlite数据库吗?

java - 在JAVA中将数据导出到文本文件时的日期和写入问题

c# - 背景图片 PCL xamarin forms iOS 放大

java - SQLite : Adding a row only if results in unique rows

c# - 将 Label 和 PickerView 放在 TableView 的同一行

c# - 使用 C# 从 Xamarin 中的 http 网站下载图像