VC用Ado接口連接和使用數(shù)據(jù)庫及注意事項
1、進行方法調用時,所傳遞的參數(shù)的類型的轉換(可能存在比本文更簡便的處理方法但我未發(fā)現(xiàn))
2、每個源文件的每行注釋說明了其文件名
3、請關注相關頭文件包含關系
4、請關注文中所有中文注釋
5、更多的內(nèi)容請參閱 "VC安裝目錄\Include\adoint.h"文件,adoint即ActiveX Data Object
InterFace(菜 鳥請勿驚慌,這僅僅只是個名稱)
二、下面的源文件與您的數(shù)據(jù)庫應用程序不直接相關,但其目標代碼(生成的.obj文件)是您必需的,請參考
file://Ado.cpp文件///////////////////////////////////////////
#include
#include
#include
該文件使用方法:新建一個空的MFC工程,將此文件添加到該工程中,編譯生成Ado.obj文件,再將此.obj文件添加到您的數(shù)據(jù)庫應用程序.該源文件在您的數(shù)據(jù)庫應用程序中是不需要的。
三、下面是與您的數(shù)據(jù)庫應用程序源文件相關代碼(非所有代碼)
file://1、ado.h文件////////////////////////////////////////
#ifndef __ADO__H__LZG
#define __ADO__H__LZG
#include
#include
#include
#endif
file://2、stdafx.h文件////////////////////////////////////////
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers
#include // MFC core and standard components
#include // MFC extensions
#include // MFC Automation classes
#include // MFC support for Internet Explorer 4 Common Controls
#include "ado.h" file://請注意這里
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include
file://3、數(shù)據(jù)庫應用程序.h文件///////////////////////////////////////////////
file://以下為用到的若干相關數(shù)據(jù)庫引用變量(聲明在其頭文件中)
ADOField* pfd;
ADOFields* pfds;
CString m_dbfile;
ADORecordset* prs;
ADOConnection* pdb;
file://4、數(shù)據(jù)庫應用程序.cpp文件/////////////////////////////////////////////
#include "stdafx.h"
#include "數(shù)據(jù)庫應用程序.h"
file://這里添加其它相關頭文件
file://以下為該.cpp文件中若干自定義或非自定義的方法,與數(shù)據(jù)庫連接相關
file://其中每一條語句都有含義,請關注其中的注釋
BOOL CBKDlg::InitDataEnv()
{
file://下面定義了一個簡單的連接字符串,當然還有更復雜的
CString s=_T("Provider=Microsoft.Jet.OLEDB.3.51;Data Source=d:\\data\\資料借閱管理.mdb");
::CoInitialize (NULL);//初始化COM環(huán)境
CoCreateInstance(CLSID_CADOConnection,
NULL,
CLSCTX_INPROC_SERVER,
IID_IADOConnection15,
(LPVOID*)&pdb
);//初始化一個ADO連接
CoCreateInstance(CLSID_CADORecordset,
NULL,
CLSCTX_INPROC_SERVER,
IID_IADORecordset,
(LPVOID*)&prs
);//初始化一個ADO數(shù)據(jù)集
CoCreateInstance(CLSID_CADOField,
NULL,
CLSCTX_INPROC_SERVER,
IID_IADOFields,
(LPVOID*)&pfds
);//初始化一個ADO數(shù)據(jù)域集合(域即是Fox中的字段,下同)
CoCreateInstance (CLSID_CADOField,
NULL,
CLSCTX_INPROC_SERVER,
IID_IADOField,
(LPVOID*)&pfd
);//初始化一個ADO數(shù)據(jù)域集合中的一個域
file://打開上述ADO連接
pdb->Open((unsigned short*)(LPCSTR)s,(unsigned short*)"",(unsigned short*)"",0);
file://打開上述ADO數(shù)據(jù)集,但它的連接參數(shù)是使用的上述字符串
file://應當存在以上面的連接替換該字符串的方法,但我沒找到
prs->Open(COleVariant(_T("資料信息")),COleVariant(s),adOpenKeyset,adLockOptimistic,adCmdTable);
file://數(shù)據(jù)集的域不存在打開與否,只需直接到已打開的數(shù)據(jù)集中引用即可,詳情請見
file://CBKDlg::OnBeforeColUpdateDatagrid方法
m_dg.ClearFields ();//MS DATAGRID 控件(Activex)的數(shù)據(jù)清空
m_dg.SetRefDataSource(prs); file://上述控件與數(shù)據(jù)集的綁定
return TRUE;
}
BOOL CBKDlg::DestroyWindow()
{
// TODO: Add your specialized code here and/or call the base class
m_dg.SetRefDataSource(NULL);
long state;
file://下面的處理可能存在邏輯上的錯誤,不過關閉數(shù)據(jù)集與數(shù)據(jù)連接的語法是正確的
if(!FAILED(prs->get_State(&state)))
if(state!=adStateClosed)
{
prs->Close();
prs=NULL;
}
if(!FAILED(pdb->get_State(&state)))
if(state!=adStateClosed)
{
pdb->Close();
pdb=NULL;
}
::CoUninitialize ();//釋放COM環(huán)境
return CDialog::DestroyWindow();
}
void CBKDlg::OnBeforeColUpdateDatagrid(short ColIndex, VARIANT FAR* OldValue, short FAR* Cancel)
{
file://該事件(方法)在MS DATAGRID 控件(ActiveX)的單元數(shù)據(jù)更新前發(fā)生
file://該事件您可能用不著,但其中的代碼您可能用得著
COleVariant v((LPCSTR)m_dg.GetText ());//獲取上述控件當前單元格的數(shù)據(jù)
CString fieldname=m_dg.GetColumns().GetItem(COleVariant(ColIndex)).GetCaption();
DataTypeEnum fieldtype;//描述ADO數(shù)據(jù)類型的枚舉類型
prs->get_Fields(&pfds);//從數(shù)據(jù)集中獲得數(shù)據(jù)域集合
pfds->get_Item (COleVariant(fieldname),&pfd);//從數(shù)據(jù)域集合中獲得特定名稱的域
pfd->get_Type (&fieldtype);//從上述域中獲取其數(shù)據(jù)類型,如整型或字符串型
switch (fieldtype){
case adSmallInt:
case adInteger:
break;
case adDate:
break;
case adCurrency://Data type describing for Money ,Understand?
break;
case adVarChar://對應于VB中的String類型和VC中的CString類型
break;
default:
break;
}
}//該方法來源于MS DataGrid ActiveX控件的事件,無具體的處理代碼,望海涵
相關文章
Asp.net在頁面間傳遞大量數(shù)據(jù)(數(shù)據(jù)表)建議采用的方法
能讓數(shù)據(jù)在 兩個不同站點之間傳遞嗎,針對這個問題將會展開本文的探討有想在A站點的數(shù)據(jù)傳遞到B站點的朋友們可以適當參考下,或許本文對你有所幫助2013-02-02.Net Core導入千萬級數(shù)據(jù)至Mysql數(shù)據(jù)庫的實現(xiàn)方法
今天我們談談MySQL怎么高性能插入千萬級的數(shù)據(jù)的,討論這個問題牽扯到一個數(shù)據(jù)遷移功能,高性能的插入數(shù)據(jù),接下來通過本文給大家分享幾種實現(xiàn)方法,感興趣的朋友跟隨小編一起學習下吧2021-05-05asp.net服務器端指令include的使用及優(yōu)勢介紹
將指定文件的內(nèi)容插入 ASP.NET 文件中,包括網(wǎng)頁(.aspx 文件)、用戶控件文件(.ascx 文件)和 Global.asax 文件2013-04-04.Net Core 下使用ZKWeb.System.Drawing實現(xiàn)驗證碼功能(圖形驗證碼)
本文介紹.Net Core下用第三方ZKWeb.System.Drawing實現(xiàn)驗證碼功能。非常不錯具有參考借鑒價值,感興趣的朋友一起看看吧2016-11-11asp.net實現(xiàn)將ppt文檔轉換成pdf的方法
這篇文章主要介紹了asp.net實現(xiàn)將ppt文檔轉換成pdf的方法,通過自定義函數(shù)實現(xiàn)將pptx格式的文件轉換成pdf格式文件的功能,是非常實用的技巧,需要的朋友可以參考下2014-11-11詳解ASP.NET Core 之 Identity 入門(一)
本篇文章主要介紹了ASP.NET Core 之 Identity 入門,主要負責對用戶的身份進行認證,有興趣的可以了解一下。2016-12-12ASP.NET百度Ueditor編輯器實現(xiàn)上傳圖片添加水印效果
這篇文章主要給大家介紹了ASP.NET百度Ueditor編輯器1.4.3這個版本實現(xiàn)上傳圖片添加水印效果的相關資料,文中通過圖文及示例代碼介紹的非常詳細,相信對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。2017-03-03ASP.NET?Core使用EF創(chuàng)建模型(包含屬性、排除屬性、主鍵和生成值)
這篇文章介紹了ASP.NET?Core使用EF創(chuàng)建模型的的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-04-04WebForm獲取checkbox選中的值(幾個簡單的示例)
WebForm中用checkbox的地方挺多的,下面寫了幾個簡單的例子,方便以后學習使用2014-07-07