首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

ADO多次调用存储过程返回结果有关问题

2012-12-17 
ADO多次调用存储过程返回结果问题前面把http://bbs.csdn.net/topics/390282261/close里面的问题已经解决了

ADO多次调用存储过程返回结果问题
前面把http://bbs.csdn.net/topics/390282261/close里面的问题已经解决了。出现了新的问题:
1. 前置条件:需要链接数据库,获取多个表中的不同数据,包括源语言/目标语言(同一个表)、车型列表(另一个表),已经对应的字符串数据(第三个表);
2. 需要调用四个不同的存储过程;
3. 除了获取字符串数据这个返回的结果集比较大(多的时候有44万数据量),获取前三项都是可以的,然后第一次获取字符串数据也是可以的。但是再次调用存储过程的时候,就返回获取的结果集count为0. 请教各位指导是什么原因?不胜感激!
部分代码如下:


// 链接数据库:
OnInitADOConn
{
 ::CoInitialize(NULL);
try
{
m_pConnection.CreateInstance("ADODB.Connection");

CStringstrConnect;
strConnect = _T("Provider=SQLOLEDB.1");
strConnect += _T(";Password=")+m_DbInfo.csPassward;
strConnect += _T(";Persist Security Info=True");
strConnect += _T(";User ID=")+m_DbInfo.csUSerName;
strConnect += _T(";Initial Catalog=")+m_DbInfo.csDBName;
strConnect += _T(";Data Source=")+m_DbInfo.csDataSource;
strConnect += _T("\n;");

m_pConnection->Open(strConnect.GetBuffer(strConnect.GetLength()+1),"","",adModeUnknown);
return TRUE;
}
catch (_com_error e)
{
CString str = e.Description();
errorMsg = &str;
AfxMessageBox(e.Description());
return FALSE;
}
}

//创建Command
m_pADOComm.CreateInstance(__uuidof(Command));
m_pADOComm->CommandType = adCmdStoredProc;// set command type to stored process
m_pADOComm->ActiveConnection = m_pConnection;
m_pConnection->CursorLocation = adUseClient; 
m_pADOComm->CommandText = commText; // 调用不同的存储过程,会将这个参数重置;

// 清理参数列表--在调用新的存储过程之前,会调用
m_pADOComm->Parameters->Delete("@source_language");
m_pADOComm->Parameters->Delete("@desc_language");
m_pADOComm->Parameters->Delete("@remap_flag_1");
m_pADOComm->Parameters->Delete("@remap_flag_2");
m_pADOComm->Parameters->Delete("@maker");

//运行Excute,获取结果集
if(m_pConnection==NULL)
OnInitADOConn(&errorMsg);
m_pRecordset.CreateInstance(__uuidof(Recordset));
m_pRecordset = m_pADOComm->Execute(NULL,NULL,adCmdStoredProc);

//运行完获取数据,对结果集进行清理
if (m_pRecordset != NULL && adStateOpen == m_pRecordset->GetState())
m_pRecordset->Close();


但是在第二次调用获取字符串的存储过程,返回结果始终为0. 实在是搞不懂什么原因导致的...
请教各位高人了。
[最优解释]
m_pADOComm做成临时变量试试。
[其他解释]
自己顶一下!!!
[其他解释]
嗯,好,我试试!难道是智能指针的问题导致的?
[其他解释]
引用:
m_pADOComm做成临时变量试试。

原因确实是我没注意到_ConnectionPtr、_CommandPtr、_RecordsetPtr都是智能指针,我本来是把这些都封装在一个单独的类中,在共同调用的时候出现了问题,修改为局部变量,问题解决了,谢谢!!!
再次感谢zyq5945.

热点排行