各位大虾,江湖救急!俺用VC对SQLServer2K数据库进行事务处理操作的时候,发现如果再一次事务处理中使用了两个Insert语句,就会报告异常,内容如下:“在事务中,不能存在多个使用此游标类型的记录集,请更改游标类型、提交事务,或关闭其中某个记录集”但是俺试过,如果用SQL自带的查询分析器来进行相同的操作,就不会有这个问题,请问这是为什么?该如何解决?(
附 当时出错的几个语句:
try
{
pDB->m_pConnection->BeginTrans (); //开始事务处理
pDB->RunCommandEx ("insert语句1");
pDB->RunCommandEx ("insert语句2");
pDB->m_pConnection->CommitTrans (); //提交事务
}
catch(_com_error &e)
{
CString errormessage;
errormessage.Format(_T("指令执行失败!\r\n\r\n错误信息:%s\n数据将会复原!!"), (LPCTSTR)e.Description());
AfxMessageBox(errormessage);
pDB->m_pConnection->RollbackTrans ();//事务处理回滚
})
附 当时出错的几个语句:
try
{
pDB->m_pConnection->BeginTrans (); //开始事务处理
pDB->RunCommandEx ("insert语句1");
pDB->RunCommandEx ("insert语句2");
pDB->m_pConnection->CommitTrans (); //提交事务
}
catch(_com_error &e)
{
CString errormessage;
errormessage.Format(_T("指令执行失败!\r\n\r\n错误信息:%s\n数据将会复原!!"), (LPCTSTR)e.Description());
AfxMessageBox(errormessage);
pDB->m_pConnection->RollbackTrans ();//事务处理回滚
})
解决方案 »
- 请教关于Windows核心编程上的两个问题
- VC2008下如何查看一个程序有没有内存泄露?
- 50分在线等,解决了就给分
- 太没人气了,来放荡了
- 如何在两个内存 DC 之间拷贝图像?
- 哪位高人提供一下“树视属性表”不用MFC实现的代码参考??
- 预编译问题(初级)
- 一个sdi程序,如何在新开的一个线程中改变statusbar的内容???
- 请问谁知道怎样在代码中为应用程序(EXE)创建一个快捷方式?在那里能下载到例子?
- 我调用::ChoosePixelFormat()时返回值是0,这是为什么呢?我给源代码你们看,谢谢不吝指教!
- 新手问题:在基于对话框的程序里画表格用什么控件?
- 怎样读取文件中的数据效率最高?
pDB->RunCommandEx ("insert语句1");
pDB->m_pConnection->CommitTrans ();//提交事务
pDB->m_pConnection->BeginTrans ();//开始事务处理
pDB->RunCommandEx ("insert语句2");
pDB->m_pConnection->CommitTrans ();//提交事务
如果如这样写,那事务处理就毫无意义了,因为"insert语句1"和"insert语句2"在这里要求同时有效完成才行,如果像那样写,做完一个提交一个就没什么用了。
另:原因俺知道了,在用Open运行SQL后,不管是那个语句都会返回一个记录集(RunCommandEx 是俺的自定义函数,实际运行时还使用的ADO的Open),这个记录集必须显式地释放才可以,以上的语句写成这样就没问题了:
pDB->m_pConnection->BeginTrans ();//开始事务处理
pRC=pDB->RunCommandEx ("insert语句1");
if(pRC!=NULL)
{
pRC->Release();
delete pRC;
}
pDB->RunCommandEx ("insert语句2");
pDB->m_pConnection->CommitTrans ();//提交事务