我要向后台3个表按T1,T2,T3的次序写入数据.为了数据完整性,我用3个事务以嵌套的形式处理.
说明:
m_pSet1: 指向T1的记录集指针.
m_pSet2: 指向T2的记录集指针.
m_pSet3: 指向T3的记录集指针.
程序的伪代码如下:m_pSet1->m_pDatabase->BeginTrans(); // 开始T1的事务
... ... ... ... // 一些插入数据表的操作if (插入成功)
{
// T1成功,开始T2的事务
m_pSet2->m_pDatabase->BeginTrans();
... ... ... ... // 一些插入数据表的操作
if (插入成功)
{
// T2成功,开始T3的事务
m_pSet3->m_pDatabase->BeginTrans();
... ... ... ... // 一些插入数据表的操作
if ( 插入成功)
{
// 提交T3的事务
m_pSet3->m_pDatabase->CommitTrans();
}
// 回滚T3的事务
m_pSet3->m_pDatabase->Rollback();
}
// 回滚T2的事务
m_pSet2->m_pDatabase->Rollback();
}
// 回滚T1的事务
m_pSet1->m_pDatabase->BeginTrans(); 我的问题是:
(1) 这段代码本身是否可行(事务能不能嵌套)?
(2) 代码是可行的,这样三重嵌套的效率我们能否接受?
我想开发数据库应用的朋友经常会遇到这种问题. 给本人提点建军议吧.
谢了!
说明:
m_pSet1: 指向T1的记录集指针.
m_pSet2: 指向T2的记录集指针.
m_pSet3: 指向T3的记录集指针.
程序的伪代码如下:m_pSet1->m_pDatabase->BeginTrans(); // 开始T1的事务
... ... ... ... // 一些插入数据表的操作if (插入成功)
{
// T1成功,开始T2的事务
m_pSet2->m_pDatabase->BeginTrans();
... ... ... ... // 一些插入数据表的操作
if (插入成功)
{
// T2成功,开始T3的事务
m_pSet3->m_pDatabase->BeginTrans();
... ... ... ... // 一些插入数据表的操作
if ( 插入成功)
{
// 提交T3的事务
m_pSet3->m_pDatabase->CommitTrans();
}
// 回滚T3的事务
m_pSet3->m_pDatabase->Rollback();
}
// 回滚T2的事务
m_pSet2->m_pDatabase->Rollback();
}
// 回滚T1的事务
m_pSet1->m_pDatabase->BeginTrans(); 我的问题是:
(1) 这段代码本身是否可行(事务能不能嵌套)?
(2) 代码是可行的,这样三重嵌套的效率我们能否接受?
我想开发数据库应用的朋友经常会遇到这种问题. 给本人提点建军议吧.
谢了!
解决方案 »
- DLL中生成托盘图标的问题。。。
- vc6.0加载gif动画问题?
- 真的是最后20分了求用点画椭圆的方法,以后不想来CSDN了,太慢了。。。。
- 我想对麦克风和摄像头进行操作,读取数据后在网络上传输语音和视频,该从哪入手呢?
- 对话框大小动态变化问题!请高手指教!
- 那位高手能说说htmlhelp的用法
- 大家好,好久没有来这里了,也好久没有用vc了,现在要重新拾回VC还是vc .net呢?学VC和考OCP哪一个好一些?
- 菜单调用问题??(各位高手帮忙)
- 显示链接DLL时出现错误,不知哪里除了问题,请教大家
- 放分`~来拿1
- recvfrom的问题
- 欢迎讨论:大家使用什么样的socket I/O模型,使用CSocket类时还用考虑I/O模型吗?来者有分
在:
// 提交T3的事务
m_pSet3->m_pDatabase->CommitTrans();
下面,增加两行:
m_pSet2->m_pDatabase->CommitTrans();
m_pSet1->m_pDatabase->CommitTrans();