我正在编写原型应用程序。现在有些事情失败了,比如插入一个非唯一的列。在这种情况下,我想回滚我所做的一切。我怎么做? 我还注意到在sqlite中我需要提交数据,在C#中它似乎是自动执行的,这让我怀疑是否有自动回滚选项?
答案 0 :(得分:13)
回滚:看起来你正在寻找的是命令文本“INSERT OR ROLLBACK ...”
事务:除非您具体说明何时开始,否则sqlite会自动将每个命令放入其自己的事务中。 编辑:TML在他的回答中更深入地解释了这一部分
显式打开/提交事务的示例是:
using (DbTransaction dbTrans = myDBConnection.BeginTransaction())
{
using (DbCommand cmd = myDBConnection.CreateCommand())
{
...
}
dbTrans.Commit();
}
答案 1 :(得分:5)
对锁定和并发的更改 在SQLite版本3中也可以控制 介绍一些微妙的变化 方式事务在SQL上工作 语言水平。默认情况下,SQLite 版本3以自动提交模式运行。 在自动提交模式下,所有更改 数据库尽快提交 与当前相关的操作 数据库连接完成。
SQL命令“BEGIN TRANSACTION” (TRANSACTION关键字是可选的) 用来取出SQLite 自动提交模式。注意BEGIN 命令不会获取任何锁定 数据库。在BEGIN命令之后,a 当获得SHARED锁时 执行第一个SELECT语句。一个 保留锁定时将获得 第一个INSERT,UPDATE或DELETE 声明被执行。没有独家 锁定被获得,直到 内存缓存填满,必须 溢出到磁盘或直到 交易提交。就这样, 系统延迟阻止读访问 文件文件,直到最后一次可能 时刻。