SQLite事务保存点问题 - c#

我在使用事务的SQLite中有一个奇怪的错误,我不知道...。
下面是我的代码:

_connection.RunInTransaction(() =>
                {
                    _connection.UpdateAll(objProposte);
                    foreach (Proposte objProposta in objProposte)
                    {
                        string propostaID = objProposta.PropostaID;
                        List<ProposteDetails> lstProdDet = _connection.Table<ProposteDetails>().Where(x => x.PropostaID == propostaID).ToList();

                        if (lstProdDet != null && lstProdDet.Count() > 0)
                        {
                            //AN UPDATE GIVE ME THE SAME ERROR
                            _connection.DeleteAll(lstProdDet);
                            _connection.InsertAll(lstProdDet);
                        }
                    }
                });

似乎_connection.UpdateAll(objProposte);工作正常,但是当我尝试在同一事务中执行其他操作时,出现以下异常:

System.ArgumentException:savePoint无效,应为
调用SaveTransactionPoint的结果。参数名称:savePoint
在SQLite.Net.SQLiteConnection.DoSavePointExecute(System.String
savePoint,System.String cmd)[0x00063]在
:0在
SQLite.Net.SQLiteConnection.Release(System.String保存点)
[0x00000]在:0中
SQLite.Net.SQLiteConnection.RunInTransaction(System.Action操作)
[0x0001d]在:0中
SQLite.Net.SQLiteConnection.InsertAll(System.Collections.IEnumerable
对象,System.Boolean runInTransaction)[0x0001e]在
:0

在互联网上阅读似乎与嵌套事务有关,但与我无关,因为它们都是在同一事务中完成的。

谢谢,
L-

编辑28-05-2018 12:16:该配置有效....但应执行与上述相同的操作:(

string my_transaction_point = null;
            try
            {
                my_transaction_point = _connection.SaveTransactionPoint();
                    _connection.UpdateAll(objProposte, runInTransaction: false);
                    foreach (Proposte objProposta in objProposte)
                    {
                        string propostaID = objProposta.PropostaID;
                        List<ProposteDetails> lstProdDet = _connection.Table<ProposteDetails>().Where(x => x.PropostaID == propostaID).ToList();
                        if (lstProdDet != null && lstProdDet.Count() > 0)
                        {
                            _connection.DeleteAll(lstProdDet);
                            _connection.InsertAll(lstProdDet, runInTransaction: false);
                        }
                    }
                _connection.Commit();
            }
            catch (Exception ex)
            {
                _connection.RollbackTo(my_transaction_point);
                throw new Exception("UpdateProposta, " + ex.Message, ex);
            }

参考方案

.UpdateAll默认情况下在其自己的事务中运行,您可以通过覆盖默认为true的第二个参数来将其关闭:

_connection.RunInTransaction(() =>
{
    _connection.UpdateAll(objProposte, false);

    // perform the rest of your CRUD operations
    ~~~
    ~~~
});

SQLite-无法连接数据库 - c#

背景:1.它是一个使用Sqlite databse的C#应用​​程序2.如果不存在db,则此应用程序将创建一个空的db,并将数据从服务器同步到该数据库。问题:1.有时应用程序突然崩溃。似乎有一些未处理的异常。2.即使我重新启动该应用程序,它也立即崩溃。临时解决方案:1.将数据库复制到其他位置,然后删除原始数据库。2.运行该应用程序。没有崩溃。由于不存在任何数…

SQLIte SUM日期时间 - c#

我有一个包含行和时间值的数据库。我想要该时间值的总和(通常,格式为%H:%M)。我这样使用SUM值:SELECT SUM(n_hores) FROM table; 但只有我得到0.0。我该怎么做?谢谢 参考方案 hh:mm格式的时间值为字符串,因此不能对字符串进行有意义的求和。您应该将这些时间值转换为数字(strftime(%s)返回自1970-01-01以…

SQLite PDO查询未返回任何结果 - php

无论查询范围如何,都不会获得结果PHP:5.3SQLite3:3.6PDO:5.3.3我认为这应该是一个非常简单的过程,但是即使环顾四周,我仍然不知道为什么我得到0个结果。这是我的代码:<?php $sqlite = new PDO('sqlite:/example.db'); $result = $sqlite->query…

Xamarin Forms按钮单击事件在运行时崩溃 - c#

我正在Xamarin中针对Windows,iOS和Android编辑一个应用程序。在可移植项目中,当编辑xaml文件时,我添加了以下按钮:<Button x:Name="Marker_Detection" Text="Marker Detection" Grid.Row="0" Grid.Co…

Sqlite WHERE子句使用参数 - c#

尝试使用where子句运行特定查询,这就是我所拥有的。//ID is user input could be anything SqliteParameter Identifier = new SqliteParameter ("@ID", ID); string SQLText = "SELECT Email FROM Cli…