ADO + VC

    技术2022-05-11  58

    Ado.cpp文件

    #include "stdafx.h"#include "Ado.h"

    CAdo::CAdo(){ m_pConnect = NULL;}

    CAdo::~CAdo(){}

    bool CAdo::ADOConnect(CString strIP, CString strUserName, CString strPwd, CString strDBName, CString & strErr)  //连接数据库,实例化智能指针,若有错误,则错误信息保存在strErr中{ try {  HRESULT hr = m_pConnect.CreateInstance(__uuidof(Connection));  //实例化  if(FAILED(hr))  {   strErr.Format((LPCTSTR)"Connect Create Instance Error.");   return false;  } } catch(_com_error * e) {  strErr = e->ErrorMessage();  return false; } catch(...) {  strErr = _T("Create connect instance unknown error");  return false; }  CString strConn; strConn.Format(_T("Provider=SQLOLEDB; Server=%s; Database=%s; uid=%s; pwd=%s;"), strIP, strDBName, strUserName, strPwd); _bstr_t strConnect=(_bstr_t)strConn;  //connecting to the database server now: try {  if(FAILED(m_pConnect->Open(strConnect,_T(""),_T(""),NULL)))    //连接数据库  {   strErr.Format(_T("Connect DB Error."));   return false;  } } catch (_com_error * e) {  strErr = e->ErrorMessage();  return false; } catch(...) {  strErr = _T("Connect DB unknown error");  return false; } return true;}

    bool CAdo::ADODisconnect(CString & strErr) //关闭记录集,释放连接{ // TODO: Add your control notification handler code here try {   if(m_pConnect != NULL && (m_pConnect->State == adStateOpen))   //关闭连接  {   m_pConnect->Close();   m_pConnect = NULL;  } } catch(_com_error* e) {  strErr = e->ErrorMessage();  return false; } return true;}

    CString CAdo::GetFilePath(int & iIndex, CString & strErr)  //获取文件路径和该记录的ID,失败则返回空{ if(m_pConnect == NULL)  // || m_pRecordset == NULL) {  strErr = _T("查询时连接或记录集错误");  return _T(""); }

     try {  TCHAR szPath[256];  //存储文件路径的缓冲区  memset(szPath, 256, sizeof(TCHAR));  _CommandPtr m_pCommand;  m_pCommand.CreateInstance(__uuidof(Command));  m_pCommand->ActiveConnection = m_pConnect; // 将库连接赋于它  m_pCommand->CommandText = _bstr_t("GetRecord");  m_pCommand->CommandType = adCmdStoredProc;     _ParameterPtr param;    //设置参数  param = m_pCommand->CreateParameter(_T("id"),adInteger, adParamOutput, sizeof(short), (short)iIndex);//返回参数,返回新建的网络的ID    m_pCommand->Parameters->Append(param);  param = m_pCommand->CreateParameter(_T("path"),adVarChar, adParamOutput, sizeof(szPath), _variant_t(szPath));    m_pCommand->Parameters->Append(param);       m_pCommand->Execute(NULL, NULL,adCmdStoredProc);   //执行存储过程,存储过程见另一篇文章

      iIndex = (short)(m_pCommand->Parameters->GetItem(_T("id"))->GetValue());   //记录的ID

      variant_t   v;     v = m_pCommand->Parameters->GetItem(_T("path"))->GetValue();//通过参数返回值  v.ChangeType(VT_BSTR,NULL);      CString strPath = v.bstrVal;  m_pCommand.Detach();    return strPath; } catch(_com_error * e) {  strErr = e->ErrorMessage();  return _T(""); }}

    bool CAdo::UpdateDB(int iIndex,CString strType, int iPageNum, CString & strErr)  //完成后更新数据库,strType为状态位 if(iIndex < 1) {  strErr = _T("记录的ID号小于1");  return false; }  _CommandPtr m_pCommand; m_pCommand.CreateInstance(__uuidof(Command)); m_pCommand->ActiveConnection = m_pConnect; // 将库连接赋于它 CString strSQL; CString strTime = _T("");    CTime tm; tm=CTime::GetCurrentTime();    //获得系统当前时间作为完成时间 strTime.Format(_T("%d-%d-%d %d:%d:%d"), tm.GetYear(), tm.GetMonth(), tm.GetDay(), tm.GetHour(), tm.GetMinute(), tm.GetSecond()); strSQL.Format(_T("Update n_project set p_flag='%s',p_complete_date='%s',p_pages=%d, p_error='%s' where p_id = %d"), strType, strTime, iPageNum, strErr, iIndex);  m_pCommand->CommandText = (_bstr_t)strSQL; // SQL语句 m_pCommand->Execute(NULL, NULL,adCmdText); // 执行更新语句 return true;}

     

    Ado.h文件#import "C:/Program Files/Common Files/System/ADO/msado15.dll" /no_namespace rename("EOF", "EndOfFile")

    class CAdo{public: CAdo(); ~CAdo(); bool ADOConnect(CString strIP, CString strUserName, CString strPwd, CString strDBName, CString & strErr);  //连接数据库,实例化智能指针,若有错误,则错误信息保存在strErr中 bool ADODisconnect(CString & strErr); //关闭记录集,释放连接 CString GetFilePath(int & iIndex, CString & strErr);  //获取文件路径和该记录的ID,失败则返回空 bool UpdateDB(int iIndex,CString strType, int iPageNum, CString & strErr); 

    private: _ConnectionPtr m_pConnect;    //ADO连接 //_RecordsetPtr m_pRecordset;   //ADO查询}; 


    最新回复(0)