首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果在事务内部数据库连接失败,如何关闭ADO连接

如果在事务内部数据库连接失败,如何关闭ADO连接
EN

Stack Overflow用户
提问于 2013-09-10 21:51:54
回答 1查看 1.4K关注 0票数 1

我正在通过C++使用ADO,让我们假设当连接中断时,我已经通过ADO开始了一个事务。

我希望放弃数据库更改并关闭ADO数据库连接对象,以便返回到另一个可以显示错误消息的代码模块(而不会使该模块处于不可靠的状态)。

问题是:

1)我无法关闭数据库连接,因为抛出了错误adErrInTransaction (0x800a0cae) (在事务中无法显式关闭connection对象)

2)我无法回滚事务,因为抛出了错误0x8000ffff (灾难性故障,...连接失败)

这似乎是第22条军规的情况。如果事务没有启动,则在ADO连接上调用Close成功,但不幸的是,事务打开时,我似乎被卡住了!

在事务中记录失败的事实是唯一的解决方案吗?这样,当数据库连接恢复时,我可以在尝试任何其他操作之前完成回滚?

这是用SQLServer 2008测试过的,如果相关的话,尽管我并不真的想要特定于SQLServer的解决方案。

EN

回答 1

Stack Overflow用户

发布于 2013-09-10 22:02:52

好吧,我很久没有这样做了,但是:

1)您必须使用db.BeginTransaction();而不是BEGIN TRANSACTION ( http://support.microsoft.com/kb/198024/en-us )开始您的事务

2)当您注意到您的连接通过以下方式断开时,只需终止事务:

代码语言:javascript
运行
复制
SqlConnection db = new SqlConnection("ado...");
SqlTransaction transaction;

db.Open();
transaction = db.BeginTransaction();
//..........
// stuff here 
//..........
if ( connGone ) {
transaction.rollback();
db.close(); }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18720796

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档