ADO + VC

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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值