VC动态链接数据库类ADOConn
生活随笔
收集整理的這篇文章主要介紹了
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 }
#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 }
總結
以上是生活随笔為你收集整理的VC动态链接数据库类ADOConn的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 光学媒体仍未消亡:新一代蓝光 DVD 光
- 下一篇: MFC的固高环形倒立摆GRIP2002实