ACCESS MFC ado 连接类 示例代码

来源:互联网 发布:男士白色豆豆鞋上淘宝 编辑:程序博客网 时间:2024/06/05 04:21
  
ifndef ADOCONNECTION_H#define ADOCONNECTION_H#include "stdafx.h"#pragma warning(disable:4146)#import "C:\Program Files\Common Files\System\ADO\msado15.dll" named_guids rename("EOF","adoEOF"), rename("BOF","adoBOF")#pragma warning(default:4146)using namespace ADODB;//数据库类型定义#define ACCESS2003 1#define ACCESS2007 2#define STDMSSQL2000 3 //MSSQL2000 7.0 Standard Security#define TRUMSSQL2000 4 //MSSQL2000 7.0 Trusted connectionclass CAdoConnection{public:        CAdoConnection(void);        ~CAdoConnection(void);        // _ConnectionPtr接口        _ConnectionPtr m_Connection;        // 初始化数据库连接        int InitConnection(void);        void SetServerAddress(CString& ServerAddress);        void SetDataBase(CString& DataBase);        void SetUser(CString& sUser);        void SetPassword(CString& sPassword);        void SetDataBaseType(int n);        int GetDataBaseType();        void SetSqlString(CString& sSql);        void ClearSqlString();        void ClearAllValue();        void Close();        BOOL Execute();        CString& GetErrorString();        BOOL SetConnectionString();protected:        // ADO连接数据库字符串        CString m_sConnection;        //出错信息        CString m_sError;        //SQL服务器地址        CString m_sServerAddress;        //SQL数据库        CString m_sDataBase;        //SQL用户名        CString m_sUser;        //SQL密码        CString m_sPassword;        //数据库类型        int m_nDataBaseType;        //SQL语句        CString m_sSql;        //产生连接字符串供        _ConnectionPtr,OPEN时候使用};#endif#include "StdAfx.h"#include "AdoConnection.h"CAdoConnection::CAdoConnection(void):m_sConnection(_T("")), m_sError(_T("")),        m_sServerAddress(_T("")), m_sDataBase(_T("")), m_sPassword(_T("")), m_sUser(_T("")){        m_nDataBaseType=0;}CAdoConnection::~CAdoConnection(void){}// 初始化数据库连接//成功返回1//失败返回0int CAdoConnection::InitConnection(void){        if (!SetConnectionString())        {                return 0;        }        if (m_sConnection.IsEmpty())        {                m_sError = _T("连接字符串为空");                return 0;        }        try        {                HRESULT hr = m_Connection.CreateInstance(__uuidof(Connection));                if (FAILED(hr))                {                        m_sError = _T("Create _ConnectionPtr Instance failed!");                        return 0;                }                hr = m_Connection->Open(_bstr_t(m_sConnection), _bstr_t(m_sUser), _bstr_t(m_sPassword), -1);                return 1;        }        catch(_com_error &e)        {                m_sError.Format(_T("数据库打开失败,错误原因:%s"), (LPCTSTR)e.Description());                return 0;        }}BOOL CAdoConnection::SetConnectionString(){        if (m_nDataBaseType == 0)        {                m_sError = _T("未指定数据库类型");                return FALSE;        }        switch (m_nDataBaseType)        {        case ACCESS2003:                if (m_sDataBase.IsEmpty())                {                        m_sError = _T("未指定ACCESS数据库文件");                        return FALSE;                }                if (m_sPassword.IsEmpty())                        m_sConnection.Format(_T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;User Id=admin;Password=;"), m_sDataBase);                else                        m_sConnection.Format(_T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;Jet OLEDB:Database Password=%s;"),m_sDataBase,m_sPassword);                break;        case ACCESS2007:                if (m_sDataBase.IsEmpty())                {                        m_sError = _T("未指定ACCESS数据库文件");                        return FALSE;                }                if (m_sPassword.IsEmpty())                        m_sConnection.Format(_T("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=%s;Persist Security Info=False;"), m_sDataBase);                else                        m_sConnection.Format(_T("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=%s;Jet OLEDB:Database Password=%s;"),m_sDataBase,m_sPassword);                break;        case STDMSSQL2000:                if (m_sServerAddress.IsEmpty())                        m_sServerAddress = _T("127.0.0.1");                if (m_sDataBase.IsEmpty())                {                        m_sError = _T("未指定SQL数据库");                        return FALSE;                }                if (m_sUser.IsEmpty())                {                        m_sError = _T("未指定SQL数据库登陆账号");                        return FALSE;                }                m_sConnection.Format(_T("Provider=sqloledb;Data Source=%s;Initial Catalog=%s;User Id=%s;Password=%s;"),                        m_sServerAddress, m_sDataBase, m_sUser, m_sPassword);                break;        case TRUMSSQL2000:                if (m_sServerAddress.IsEmpty())                        m_sServerAddress = _T("127.0.0.1");                if (m_sDataBase.IsEmpty())                {                        m_sError = _T("未指定SQL数据库");                        return FALSE;                }                m_sConnection.Format(_T("Provider=sqloledb;Data Source=%s;Initial Catalog=%s;Integrated Security=SSPI;"),                        m_sServerAddress, m_sDataBase);                break;        default:                break;        }        return TRUE;}void CAdoConnection::SetUser( CString& sUser){        m_sUser = sUser;}void CAdoConnection::SetPassword( CString& sPassword){        m_sPassword = sPassword;}CString& CAdoConnection::GetErrorString(){        return m_sError;}void CAdoConnection::SetDataBaseType( int n ){        m_nDataBaseType = n;}int CAdoConnection::GetDataBaseType(){        return m_nDataBaseType;}void CAdoConnection::SetSqlString( CString& sSql ){        m_sSql = sSql;}void CAdoConnection::ClearSqlString(){        m_sSql = _T("");}void CAdoConnection::ClearAllValue(){        m_sConnection = _T("");        m_sError = _T("");        m_sUser = _T("");        m_sPassword = _T("");        m_sDataBase = _T("");        m_nDataBaseType = 0;        m_sSql = _T("");}void CAdoConnection::Close(){        if (m_Connection->State)                m_Connection->Close();        m_Connection = NULL;}BOOL CAdoConnection::Execute(){        COleVariant vtOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);        if(!m_Connection->Execute(_bstr_t(m_sSql), &vtOptional, -1))        {                m_sError = _T("SQL执行失败!");                return FALSE;        }        return TRUE;}void CAdoConnection::SetServerAddress( CString& ServerAddress ){        m_sServerAddress = ServerAddress;}void CAdoConnection::SetDataBase( CString& DataBase ){        m_sDataBase = DataBase;}