ADO方式访问数据库,一些注意事项
来源:互联网 发布:mac地址可以随便改吗 编辑:程序博客网 时间:2024/06/08 20:57
在这里需要注意两个问题:
1. 初始化完Command之后,如果立即调用get_Count函数去获得Command的参数个数,将会得到错误的结果,原因调查中,暂无结论。
2. 在需要多次调用存储过程的时候,要注意到_ConnectionPtr,_CommandPtr,_RecordsetPtr都是智能指针,最好作为局部变量来处理(如果作为局部变量来处理,release,close什么的都是浮云了)。
3. 不同的存储过程不能共享同一个Command, 必须一个有自己独占一个Command.
首先要链接数据库,示例代码如下:
1. 初始化完Command之后,如果立即调用get_Count函数去获得Command的参数个数,将会得到错误的结果,原因调查中,暂无结论。
2. 在需要多次调用存储过程的时候,要注意到_ConnectionPtr,_CommandPtr,_RecordsetPtr都是智能指针,最好作为局部变量来处理(如果作为局部变量来处理,release,close什么的都是浮云了)。
3. 不同的存储过程不能共享同一个Command, 必须一个有自己独占一个Command.
首先要链接数据库,示例代码如下:
/*----------------------------------------------------------------------------*/
// Connection database::CoInitialize(NULL);//初始化线程 ADO方式调用存储过程使用到了COM库,需要调用CoInitialize初始化线程// 同时在结束时需要调用CoUninitialize释放资源try{ m_pConnection.CreateInstance("ADODB.Connection"); CString strConnect; 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;}/*----------------------------------------------------------------------------*/// Create command for stored processm_pADOComm.CreateInstance(__uuidof(Command));m_pADOComm->CommandType = adCmdStoredProc; // set command type to stored processm_pADOComm->ActiveConnection = m_pConnection;m_pConnection->CursorLocation = adUseClient; m_pADOComm->CommandText = commText; // the name of the stored process// Release the parameters of the commandm_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");/*----------------------------------------------------------------------------*/// init command parametersint lenth = 10;_bstr_t strParmVal;strParmVal = (_bstr_t)csSrcLang;// Set source language to the command of the ADOpParm = m_AdoConn->m_pADOComm->CreateParameter("@source_language",adVarChar,adParamInput,lenth,strParmVal);m_AdoConn->AddParamToCom(pParm); strParmVal = (_bstr_t)m_desLangArray[nDesLIndex].csLangCode;pParm = m_AdoConn->m_pADOComm->CreateParameter("@desc_language",adVarChar,adParamInput,lenth,strParmVal);m_AdoConn->AddParamToCom(pParm); remap_flag_1 = 1;remap_flag_2 = 4;// Set remap_flag range to the command of the ADOpParm = m_AdoConn->m_pADOComm->CreateParameter("@remap_flag_1",adInteger,adParamInput,sizeof(int),remap_flag_1);m_AdoConn->AddParamToCom(pParm); pParm = m_AdoConn->m_pADOComm->CreateParameter("@remap_flag_2",adInteger,adParamInput,sizeof(int),remap_flag_2);m_AdoConn->AddParamToCom(pParm); strMarker = "BANZ";pParm = m_AdoConn->m_pADOComm->CreateParameter("@maker",adVarChar,adParamInput,max_vehicle_str_len,strMarker);m_AdoConn->AddParamToCom(pParm);/*----------------------------------------------------------------------------*/// Excute stored process and get the recordif(m_pConnection==NULL) OnInitADOConn(&errorMsg);m_pRecordset.CreateInstance(__uuidof(Recordset));m_pRecordset = m_pADOComm->Execute(NULL,NULL,adCmdStoredProc);/*----------------------------------------------------------------------------*/// Get the data from the recordfor (_pRecordset->MoveFirst(); !_pRecordset->adoEOF; _pRecordset->MoveNext()){ _variant_t vRet; vRet = _pRecordset->GetCollect("EN"); if (VT_NULL == vRet.vt) {csTempEn = _T(""); } else {csTempEn = (LPCTSTR)(_bstr_t)_pRecordset->GetCollect("EN"); } ......}/*----------------------------------------------------------------------------*/// Exit connection try{ if (m_pRecordset != NULL && adStateOpen == m_pRecordset->GetState())m_pRecordset->Close(); m_pRecordset=NULL; m_pConnection->Close(); m_pADOComm->Cancel();}catch(_com_error e){ return;}::CoUninitialize();
- ADO方式访问数据库,一些注意事项
- VC++ ADO方式访问数据库简要笔记
- ADO.NET访问数据库的方式
- 数据库访问方式(ODBC OLEDB ADO ADO.NET)
- ADO.NET 连接方式和非链接方式访问数据库
- ADO.NET_01_访问方式
- 学习ADO和ODBC访问数据库的一些思路整理
- 学习ADO和ODBC访问数据库的一些思路整理
- 学习ADO和ODBC访问数据库的一些思路整理
- ado方式访问带密码数据库的方法
- VC下ADO的数据库访问方式举例
- ado方式访问带密码数据库的方法
- 关于以ODBC和ADO方式访问excel数据库总结
- 关于以ODBC和ADO方式访问excel数据库总结
- MySql基于ADO.NET方式访问数据库ADOHelper封装MySqlHelper
- VS2010、MFC ADO方式访问ACCESS数据库笔记
- ADO访问数据库整理
- ADO访问数据库大全
- RedHat 5.8内/home目录移植到新建的存储
- java 处理properties文件中 占位符
- spring.net错误排查 Error creating context 'spring.root': InputStream is null from Resource
- JavaScript经典教程重磅推荐,值得拥有的书籍。
- java读取命令行参数又一方法
- ADO方式访问数据库,一些注意事项
- 微博为什么这么火,微博如何给企业带来收益。
- Android AsyncTask 的使用
- C++使用VS2010导出Excel的方法及步骤
- sql里的通配符过滤 '_' '%' '[]'
- Ubuntu 编译 CAM 库:libarea 的方法
- PCI地址空间
- 教程:VS2010 之TFS入门指南
- 对classLoader加载资源的理解