VC动态链接数据库类ADOConn

//环境Windows XP SP3+VS2010 UNICODE
//头文件ADOConn.h
#pragma once

#import "c:\Program Files\Common Files\System\ado\msado15.dll" no_namespace  \
rename("EOF","adoEOF") rename("BOF","adoBOF")

class ADOConn
{
public:
ADOConn(void);
~ADOConn(void);
void OnInitADOConn();
void ExitConnect();
_RecordsetPtr& GetRecordset(_bstr_t bstrSQL);
BOOL ExecuteSQL(_bstr_t bstrSQl);

//
public:
_ConnectionPtr m_pConnection;
_RecordsetPtr m_pRecordset;
};

//实现文件ADOConn.cpp
#include "StdAfx.h"
#include "ADOConn.h"

ADOConn::ADOConn(void)
{
}

ADOConn::~ADOConn(void)
{
}

void ADOConn::OnInitADOConn()
{
//初始化OLE/COM库环境
::CoInitialize(NULL);
try
{
m_pConnection.CreateInstance("ADODB.Connection");
// 设置连接字符串,必须是BSTR型或者_bstr_t类型

TCHAR szFilePath[MAX_PATH + 1];
GetModuleFileName(NULL, szFilePath, MAX_PATH);
(_tcsrchr(szFilePath, _T('\\')))[1] = 0;             //删除文件名,只获得路径。
CString dbpath= szFilePath;
TRACE1("dbpath = %s\n",dbpath);

//Access 2003
//_bstr_t strConnect="uid=;pwd=;DRIVER={Microsoft Access Driver(*.mdb)};DBQ=nkj.mdb;";    //Access 2003标准链接  
//_bstr_t strConnect  = "Driver={Microsoft Access Driver (*.mdb)}; DBQ=C:\App1\你的数据库名.mdb; Exclusive=1; Uid=你的用户名; Pwd=你的密码;"  //独占方式连接
_bstr_t strConnect = _T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=") + dbpath  + _T("data\\nkj.mdb;User ID=admin;Password=;");   //普通方式无密码  
//_bstr_t strConnect = _T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=") + dbpath + _T("data\\nkj.mdb;Jet OLEDB:Database Password=你的密码;");   
//普通方式,有密码 

//Access 2007
//_bstr_t strConnect =Provider="Microsoft.ACE.OLEDB.12.0;Data Source=C:\myFolder\myAccess2007file.accdb;Persist Security Info=False; " ;   //标准安全链接
//_bstr_t strConnect =Provider="Microsoft.ACE.OLEDB.12.0;Data Source=C:\myFolder\myAccess2007file.accdb;Jet OLEDB:Database Password=MyDbPassword;";    //包括数据库密码

//SQL Server
//_bstr_t strConnect = "Provider=SQLOLEDB; Server=127.0.0.1;Database=Mis; uid=sa; pwd=sa;";

m_pConnection->Open(strConnect,"","",adModeUnknown);
}
catch (_com_error e)
{
AfxMessageBox(e.Description());
}
}

void ADOConn::ExitConnect()
{

if (m_pRecordset!=NULL)
{
m_pRecordset->Close();
}
m_pConnection->Close();

::CoUninitialize();
}

_RecordsetPtr& ADOConn::GetRecordset(_bstr_t bstrSQL)
{
try
{
if (m_pConnection == NULL)
{
OnInitADOConn();
}
m_pRecordset.CreateInstance(__uuidof(Recordset));
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 RecordAffected;
try
{
if (m_pConnection == NULL)
{
OnInitADOConn();
}
m_pConnection->Execute(bstrSQL,NULL,adCmdText /*文本命令*/);
return TRUE;
}
catch (_com_error e)
{
AfxMessageBox(e.Description());
return FALSE;
}

}

//简单用法,记得在XXX.CPP添加  #include "ADOConn.h"

BOOL CXXX::OnInitDialog()
{


  //其他代码
m_listUser.SetExtendedStyle
(m_listUser.GetExtendedStyle()|LVS_EX_HEADERDRAGDROP|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES | LVS_EX_ONECLICKACTIVATE);
m_listUser.InsertColumn(0, _T("#"), LVCFMT_LEFT,20);
m_listUser.InsertColumn(1, _T("用户"), LVCFMT_LEFT, 60);
m_listUser.InsertColumn(2, _T("性别"), LVCFMT_LEFT, 60);
m_listUser.InsertColumn(3, _T("职务"), LVCFMT_LEFT, 60);
m_listUser.InsertColumn(4, _T("用户类型"), LVCFMT_LEFT, 80);
ADOConn  m_AdoConn;
//open database
m_AdoConn.OnInitADOConn();
CString  sql;
sql.Format(_T("select* from tbUser order by No desc"));
_RecordsetPtr   m_pRecordset;
m_pRecordset = m_AdoConn.GetRecordset((_bstr_t)sql);
//遍历记录集
while(m_AdoConn.m_pRecordset->adoEOF  == 0)
{
m_listUser.InsertItem(0,_T(""));
m_listUser.SetItemText(0,0,(TCHAR *)(_bstr_t)m_pRecordset->GetCollect("No"));
m_listUser.SetItemText(0,1,(TCHAR *)(_bstr_t)m_pRecordset->GetCollect("user"));
m_listUser.SetItemText(0,2,(TCHAR *)(_bstr_t)m_pRecordset->GetCollect("sex"));
m_listUser.SetItemText(0,3,(TCHAR *)(_bstr_t)m_pRecordset->GetCollect("position"));
m_listUser.SetItemText(0,4,(TCHAR *)(_bstr_t)m_pRecordset->GetCollect("permissions"));
m_pRecordset->MoveNext();
}
m_AdoConn.ExitConnect();

  //其他代码

return TRUE;  // return TRUE unless you set the focus to a control
// 异常: OCX 属性页应返回 FALSE
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值