关闭

数据库类操作之前封装

标签: 数据库nullsql serverfileserverinterface
893人阅读 评论(0) 收藏 举报

ADOConn.h 文件:

// ADOConn.h: interface for the ADOConn class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_ADOCONN_H__0CD30419_D230_4F42_BBCC_E118D4238231__INCLUDED_)
#define AFX_ADOCONN_H__0CD30419_D230_4F42_BBCC_E118D4238231__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "RxRecordset.h"

class ADOConn 
{
public:
 ADOConn();
 virtual ~ADOConn();

 void OnInitADOConn();//初始化连接数据库
 //执行查询
 _RecordsetPtr& GetRecordset(_bstr_t bstrSQL);
 _ConnectionPtr GetConnection();
 //执行SQL语句,Insert Update _variant_t
 BOOL ExecuteSQL(_bstr_t bstrSQL);
 void ExitConnect();
 CString AutoNumber(CString sTable, CString sFieldName, CString sCode,int Style);
 int GetRecordCount(_RecordsetPtr pRst);
private:
 _ConnectionPtr m_pCon;
 _RecordsetPtr m_pRs;
};
#endif // !defined(AFX_ADOCONN_H__0CD30419_D230_4F42_BBCC_E118D4238231__INCLUDED_)

ADOConn.cpp 文件: 

// ADOConn.cpp: implementation of the ADOConn class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "ADOConn.h"
#include "MainFrm.h"
#include "AppFullPath.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

ADOConn::ADOConn()
{

}

ADOConn::~ADOConn()
{

}

void ADOConn::OnInitADOConn()
{
 ::CoInitialize(NULL);
    _bstr_t bstrConnect;
 

 CString strConnect;
 char m_pzUser[128];     //登录数据库用户
 char m_pzPassWord[128]; //登录数据库密码
 char m_pzDataBase[128]; //登录数据库名称
 char m_pzServer[128]; //服务器名称
  CAppFullPath dlgpath;
    CFileFind finder;
 BOOL finded;
 CString databasepath;
    databasepath=dlgpath.GetDatabasePath();
 finded=finder.FindFile(databasepath);
 HRESULT hr;
 try
 {
  m_pCon.CreateInstance(__uuidof(Connection));
  m_pCon->CursorLocation =adUseClient;
  if(!finded)
  {
   AfxMessageBox("数据库检查失败!");
   return;
  }
  GetPrivateProfileString("OPTION", "Server", "(local)", m_pzServer, sizeof(m_pzServer), databasepath) ;
  GetPrivateProfileString("OPTION", "DataBase", "WebGoServer", m_pzDataBase, sizeof(m_pzDataBase), databasepath) ;
  GetPrivateProfileString("OPTION", "UserId", "sa", m_pzUser, sizeof(m_pzUser),  databasepath) ;
  GetPrivateProfileString("OPTION", "PassWord", "sa", m_pzPassWord, sizeof(m_pzPassWord), databasepath) ;
  
  strConnect.Format("driver={SQL Server};SERVER=%s;UID=%s;PWD=%s;DATABASE=%s",
   m_pzServer, m_pzUser, m_pzPassWord, m_pzDataBase);

        hr = m_pCon.CreateInstance(__uuidof(Connection));//创建Connection对象
  if(SUCCEEDED(hr))
  {
   m_pCon->ConnectionString=(_bstr_t)strConnect;

   hr = m_pCon->Open("","","",adModeUnknown);
  }
  
 }
 catch(_com_error e)///捕捉异常
 {
  CString errormessage;
  errormessage.Format("连接数据库失败!/r/n错误信息:%s",e.ErrorMessage());
  ::MessageBox(NULL, errormessage, "ERROR", MB_OK|MB_ICONERROR);
  CMainFrame *p=(CMainFrame *)AfxGetApp()->m_pMainWnd;
  p->DestroyWindow();
 }
}

_RecordsetPtr& ADOConn::GetRecordset(_bstr_t bstrSQL)
{
 try
 {
  //连数据库,如果Connection对象为空,则重新连数据库
        if(m_pCon==NULL)
           OnInitADOConn();
  //创建记录集对象
  m_pRs.CreateInstance(__uuidof(Recordset));
  m_pRs->Open(bstrSQL,m_pCon.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
 }
    //捕捉异常
    catch(_com_error *e)
  {
   AfxMessageBox(e->Description());
  }
 //返回记录集
 return m_pRs;
}

BOOL ADOConn::ExecuteSQL(_bstr_t bstrSQL)
{
 try
 {
  if(m_pCon==NULL)
   OnInitADOConn();
  m_pCon->Execute(bstrSQL,NULL,adCmdText);
  return true;
 }
 catch(_com_error e)
 {
  AfxMessageBox(e.Description());
  return false;
 }
}

_ConnectionPtr ADOConn::GetConnection()
{
 return m_pCon;
}

void ADOConn::ExitConnect()
{
    if(m_pRs!=NULL)
  m_pRs->Close();
 m_pCon->Close();
 //释放环境
 ::CoUninitialize();
}

CString ADOConn::AutoNumber(CString sTable, CString sFieldName, CString sCode,int Style)
{
 
 CString sNewNumber;
 return sNewNumber;
}

int ADOConn::GetRecordCount(_RecordsetPtr pRst)
{
    int count=0;
 try
 {
  pRst->MoveFirst();
 }
 catch(...)
 {
  return 0;
 }
 while(!pRst->adoEOF)
 {
  pRst->MoveNext();
  count=count+1;
 }
 pRst->MoveFirst();
 return count;
}

0
0

猜你在找
【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐(算法+实战)--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:17232次
    • 积分:365
    • 等级:
    • 排名:千里之外
    • 原创:12篇
    • 转载:3篇
    • 译文:0篇
    • 评论:4条
    文章分类
    最新评论