sql/db事务没有使用ms sql正确回滚

Mat*_*ark 11 transactions go sql-server-2008 gorp

所以我不能太具体,但我认为我能告诉你的就足以解决这个问题了.首先,我正在使用gorp进行设置并获得交易.我正在使用github.com/denisenkom/go-mssqldb驱动程序.

然后我经历了一系列的操作,如果他们失败我rollback,如果一切都成功我commit.问题是它只会回滚失败的语句而不是其他操作.我错了,这不是假设工作的方式吗?

这是一些粗略的psudocode,让你更好地了解我在说什么:

trans,err := dbmap.Begin()
//assume all errors are received and checked before continuing
id := trans.Exec("insert thing") //successful, persists after rollback 
thing := trans.Select("Select thing") //successful
trans.Exec("update other_thing with thing") //successful, persists after rollback
newthing := trans.Exec("insert new_thing with thing") //fails, rollsback
if err != nil{
   trans.Rollback() //No errors
   return
}
trans.Commit()
Run Code Online (Sandbox Code Playgroud)

我错了,那应该是rollback一切dbmap.Begin()吗?这是驱动程序实现中的错误吗?我们非常欢迎任何和所有的帮助.谢谢!

更新

测试了https://play.golang.org/p/0L3Vgk8C_F,它起作用,所以我猜这意味着它与gorp有关.我正在使用v1分支,因为这将很快生产,因此稳定性是关键.我将通过它,但看起来它只是轻轻地包裹它.

小智 2

检查您没有启用自动提交。许多命令行工具、用户界面甚至驱动程序都默认启用它