各位大虾,江湖救急!俺用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 ();//事务处理回滚
})

解决方案 »

  1.   

    http://topic.csdn.net/t/20030605/14/1879525.html
      

  2.   

    to   lang8134(heaton):那个帖子参考了一下,发现还是不行。不过后来知道原因了。在用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 ();//提交事务
    pRC是事先定义的记录集指针