文章类型: VC&C++
关键词: 数据库,microsoft,database,permissions,null,access
内容摘要: VC动态链接数据库类ADOConn

VC动态链接数据库类ADOConn

2016/9/19 15:50:49    来源:apple    阅读:

直接上代码:

/环境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
}


↑ 上一篇文章:visio绘制用例图 带图例 关键词:visio绘制用例图,带图例 发布日期:2016/9/19 14:41:15
↓ 下一篇文章:万能的SqlHelper,麻麻再也不用担心用什么数据库了 关键词:万能的SqlHelper,麻麻再也不用担心用什么数据库了 发布日期:2016/9/20 15:09:19
相关文章:
VC++下使用ADO编写ACCESS数据库程序 关键词:Access,数据库,vc++,null,table,sql,command 发布日期:2016-09-21 14:11
VC中使用ADO连接MSSQL 关键词:VC中,ADO,MSSQL,,null,sql,server,数据库,database,quer.. 发布日期:2016-09-22 11:12
用SQLiteDatabase类的execSQL和rawQuery方法操作数据库 关键词:SQLiteDatabase,execSQL,rawQuery,方法,操作,数据库 发布日期:2019-04-15 15:59
相关目录:.NETVC&C++DATABASE软件开发
我要评论
正在加载评论信息......