SQL Server CE 回滚不撤消删除

Posted

技术标签:

【中文标题】SQL Server CE 回滚不撤消删除【英文标题】:SQL Server CE rollback does not undo delete 【发布时间】:2009-10-26 19:18:16 【问题描述】:

我正在使用带有 .NET Compact Framework 3.5 的 SQL Server CE 3.5 和 C#。在我的代码中,我插入一行,然后启动一个事务,然后从表中删除该行,然后对该事务进行回滚。但这并不能撤消删除。为什么不?这是我的代码:

SqlCeConnection conn = ConnectionSingleton.Instance;
conn.Open();
UsersTable table = new UsersTable();
table.DeleteAll();
MessageBox.Show("user count in beginning after delete: " + table.CountAll());
table.Insert(
new User()Id = 0, IsManager = true, Pwd = "1234", Username = "Me");
MessageBox.Show("user count after insert: " + table.CountAll());
SqlCeTransaction transaction = conn.BeginTransaction();
table.DeleteAll();
transaction.Rollback();
transaction.Dispose();
MessageBox.Show("user count after rollback delete all: " + table.CountAll());

这些消息表明一切都按预期工作,直到表的计数为 0 表示回滚没有撤消删除。

【问题讨论】:

如果 DeleteAll 正在执行截断,那就是你的问题。 【参考方案1】:

我刚刚在微软的论坛上得到了回答。您需要使用 SqlCeCommand 对象的 Transaction 属性将 SqlCeComand 对象与事务相关联。

【讨论】:

正确 - 连接上的事务不会被针对该连接运行的所有命令自动登记。你必须告诉命令参与事务。

以上是关于SQL Server CE 回滚不撤消删除的主要内容,如果未能解决你的问题,请参考以下文章

Spring @Transactional 和回滚不起作用,弹簧集成测试

Mysqli回滚不起作用

无法从 SQL Server CE 中删除记录

如何从 SQL Server CE 表中删除一行?

实体框架 - 重新开始 - 撤消/回滚所有迁移

如何删除大量数据 sql server2005 数据量在8千万左右??