以前写的一个数据库操作类.其中有参考网上很多朋友的代码.非常谢谢!
一.在stdafx.h头文件中加入
#import "c:/Program Files/Common Files/System/ado/msado15.dll" no_namespace rename("EOF","adoEOF") rename("BOF","adoBOF")
注意在下面二句之间加入.否则会出错.
#endif // _AFX_NO_AFXCMN_SUPPORT
//在这下面加入上面这句.
//{{AFX_INSERT_LOCATION}}
二.新建一个ADOConn的类.在ADOConn.cpp中最上面加入#include "stdafx.h".
三.其中ADOConn.h中的代码如下:
- // ADOConn.h: interface for the ADOConn class.
- //
- //
- #if !defined(AFX_ADOCONN_H__FF7DB821_D61D_437A_9FA8_193D48F1C1F5__INCLUDED_)
- #define AFX_ADOCONN_H__FF7DB821_D61D_437A_9FA8_193D48F1C1F5__INCLUDED_
- #if _MSC_VER > 1000
- #pragma once
- #endif // _MSC_VER > 1000
- class ADOConn
- {
- //public:
- // ADOConn();
- // virtual ~ADOConn();
- // 定义变量
- public:
- //添加一个指向Connection对象的指针:
- _ConnectionPtr m_pConnection;
- //添加一个指向Recordset对象的指针:
- _RecordsetPtr m_pRecordset;
- // 定义方法
- public:
- ADOConn();
- virtual ~ADOConn();
- // 初始化—连接数据库
- void OnInitADOConn();
- // 执行查询
- _RecordsetPtr& GetRecordSet(_bstr_t bstrSQL);
- // 执行SQL语句,Insert Update _variant_t
- BOOL ExecuteSQL(_bstr_t bstrSQL);
- void ExitConnect();
- };
- #endif // !defined(AFX_ADOCONN_H__FF7DB821_D61D_437A_9FA8_193D48F1C1F5__INCLUDED_)
四.其中ADOConn.cpp中的代码如下:
- // ADOConn.cpp: implementation of the ADOConn class.
- //
- //
- #include "stdafx.h"
- #include "First.h"
- #include "ADOConn.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()
- {
- // 初始化OLE/COM库环境
- ::CoInitialize(NULL);
- HRESULT hr=m_pConnection.CreateInstance(__uuidof(Connection));
- if(SUCCEEDED(hr))
- try
- {
- }
- catch(_com_error e)//捕获错误
- {
- e.Description();
- e.ErrorMessage();
- e.Source();
- }
- //打开数据库:
- CString strConn;
- //MyConn.udl为数据库连接文件,以下是其位置.
- m_pConnection->ConnectionString ="File Name=d://vc//MyConn.udl";
- try
- {
- m_pConnection->Open(L"",L"",L"",-1);
- }
- catch(_com_error e)///捕捉异常
- {
- CString errormessage;
- errormessage.Format("打开数据库失败!/r/n错误信息:%s", e.ErrorMessage());
- AfxMessageBox(errormessage);///显示错误信息
- //return FALSE;
- }
- //AfxMessageBox("打开数据库正常");
- }
- // 执行查询
- _RecordsetPtr& ADOConn::GetRecordSet(_bstr_t bstrSQL)
- {
- try
- {
- // 连接数据库,如果Connection对象为空,则重新连接数据库
- if(m_pConnection==NULL)
- OnInitADOConn();
- // 创建记录集对象
- m_pRecordset.CreateInstance(__uuidof(Recordset));
//不加这句会出现The rowset is not bookmarkable运行错误
- // 取得表中的记录
- m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
- }
- // 捕捉异常
- catch(_com_error e)
- {
- // 显示错误信息
- AfxMessageBox(e.Description());
- }
- // 返回记录集
- return m_pRecordset;
- }
- // 执行SQL语句,Insert Update _variant_t
- BOOL ADOConn::ExecuteSQL(_bstr_t bstrSQL)
- {
- // _variant_t RecordsAffected;
- try
- {
- // 是否已经连接数据库
- if(m_pConnection == NULL)
- OnInitADOConn();
- // Connection对象的Execute方法:(_bstr_t CommandText,
- // VARIANT * RecordsAffected, long Options )
- // 其中CommandText是命令字串,通常是SQL命令。
- // 参数RecordsAffected是操作完成后所影响的行数,
- // 参数Options表示CommandText的类型:
- //adCmdText-文本命令;adCmdTable-表名
- // adCmdProc-存储过程;adCmdUnknown-未知
- m_pConnection->Execute(bstrSQL,NULL,adCmdText);
- return true;
- }
- catch(_com_error e)
- {
- AfxMessageBox(e.Description());
- return false;
- }
- }
- void ADOConn::ExitConnect()
- {
- // 关闭记录集和连接
- if (m_pRecordset != NULL)
- m_pRecordset->Close();
- m_pConnection->Close();
- // 释放环境
- ::CoUninitialize();
- }