数据库类操作之前封装

原创 2007年09月20日 08:48:00

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;
}

(7.2.5.1)在执行此操作之前,请在数据库中创建一个主密钥或在会话中打开该主密钥。

本地建了一个数据库,并创建了秘钥 附加到另外一个数据实例的时候,提示主密钥未打开。 今天测试将加密的数据库还原到另外一台服务器,执行解密代码的时候出现下面的错误信息: ...

Eclipse连接到My sql数据库之前操作

Eclipse连接到My sql数据库之前操作 1:首先是安装My sql数据库(为了减少你的麻烦,按照下面的连接,下载即可)百度云链接:http://pan.baidu.com/s/1mitWmb...

JAVA多线程—CountDownLatch-一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。

CountDownLatch类介绍 犹如倒计时计数器,调用CountDownLatch对象的countDown方法就将计数器减1,当计数到达0时,则所有等待者或单个等待者开始执行。 可以实现一个人(也...

ie还原到之前版本操作截图

  • 2016年02月02日 16:53
  • 231KB
  • 下载

VC++下ADO数据库操作的封装类

一、ADO 对象 对象 说明 Command Command 对象定义了将对数据源执行的指定命令。 Connection ...

PDO数据库操作封装类

网上找到的一个PDO数据库操作封装类 有一些问题 加入throw_exception()函数 修改一些调用了$this 的 static方法  去除static关键字 “因为stati...
  • keyunq
  • keyunq
  • 2011年10月14日 16:42
  • 2453

Java数据库操作封装类

  • 2017年07月09日 09:33
  • 5.19MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数据库类操作之前封装
举报原因:
原因补充:

(最多只允许输入30个字)