MFC使用ADO連線SQL Server資料庫

2021-06-18 18:29:46 字數 4961 閱讀 8997

1.首先,要用#import語句來引用支援ado的元件型別庫(*.tlb),其中型別庫可以作為可執行程式(dll、exe等)的一部分被定位在其自身程式中的附屬資源裡,如:被定位在msado15.dll的附屬資源中,只需要直接用 #import引用它既可。可以直接在stdafx.h檔案中加入下面語句來實現:

#import "c:/program files/common files/system/ado/msado15.dll" no_namespace rename("eof", "adoeof")
其中路徑名可以根據自己系統安裝的ado支援檔案的路徑來自行設定。當編譯器遇到#import語句時,它會為引用元件型別庫中的介面生成包裝類,#import語句實際上相當於執行了api涵數loadtypelib()。#import語句會在工程可執行程式輸出目錄中產生兩個檔案,分別為*.tlh(型別庫標頭檔案)及*.tli(型別庫實現檔案),它們分別為每乙個介面產生智慧型指標,並為各種介面方法、列舉型別,clsid等進行宣告,建立一系列包裝方法。語句no_namespace說明ado物件不使用命名空間,rename ("eof", "adoeof")說明將ado中結束標誌eof改為adoeof,以避免和其它庫中命名相衝突。

2.其次,在程式初始過程中需要初始化元件,一般可以用coinitialize(null);來實現,這種方法在結束時要關閉初始化的com,可以用下面語句couninitialize();來實現。在mfc中還可以採用另一種方法來實現初始化com,這種方法只需要一條語句便可以自動為我們實現初始化com和結束時關閉com的操作,語句如下所示: afxoleinit();

3.接著,就可以直接使用ado的操作了。我們經常使用的只是前面用#import語句引用型別庫時,生成的包裝類.tlh中宣告的智慧型指標中的三個,它們分別是_connectionptr、_recordsetptr和_commandptr。下面分別對它們的使用方法進行介紹:

_connectionptr介面返回乙個記錄集或乙個空指標。通常使用它來建立乙個資料連線或執行一條不返回任何結果的sql語句,如乙個儲存過程。使用 _connectionptr介面返回乙個記錄集不是乙個好的使用方法。對於要返回記錄的操作通常用_recordserptr來實現。而用 _connectionptr操作時要想得到記錄條數得遍歷所有記錄,而用_recordserptr時不需要。

_commandptr介面返回乙個記錄集。它提供了一種簡單的方法來執行返回記錄集的儲存過程和sql語句。在使用_commandptr介面時,你可以利用全域性 _connectionptr介面,也可以在_commandptr介面裡直接使用連線串。如果你只執行一次或幾次資料訪問操作,後者是比較好的選擇。但如果你要頻繁訪問資料庫,並要返回很多記錄集,那麼,你應該使用全域性_connectionptr介面建立乙個資料連線,然後使用_commandptr 介面執行儲存過程和sql語句。

_recordsetptr是乙個記錄集物件。與以上兩種物件相比,它對記錄集提供了更多的控制功能,如記錄鎖定,游標控制等。同_commandptr介面一樣,它不一定要使用乙個已經建立的資料連線,可以用乙個連線串代替連線指標賦給 _recordsetptr的connection成員變數,讓它自己建立資料連線。如果你要使用多個記錄集,最好的方法是同command物件一樣使用已經建立了資料連線的全域性_connectionptr介面,然後使用_recordsetptr執行儲存過程和sql語句。

**呢??為什麼沒有**?呵呵!慢慢來,**:

1.建立乙個mfc對話方塊工程(不會的話,如果不會請學會。。很簡單)

2.在stdafx.h匯入

#import "c://program files//common files//system//ado" no_namespace rename("eof","adoeof")rename("bof","adobof")

3.新建乙個generic class,取個名字eg。adosql。在public:下新增成員函式:

_connectionptr m_pconnection; // 資料庫

_recordsetptr m_precordset; // 命令

_commandptr m_pcommand; // 記錄

void oninitadoconn();

void exitconnect();

//然後寫oninitadoconn()和exitconnect()函式

void adosql::oninitadoconn()

catch(_com_error e)

}//這裡是連線master資料庫,無密碼。

void adosql::exitconnect()

4.ok,我們可以開始用了:

首先,把我們類的標頭檔案包含在主程式#include "adosql.h"

申明乙個全域性變數:adosql mysql;//物件宣告

連線的**可以做乙個按鈕eg:

void csqldlg::onbutton4()

或者在插入在oninitdialog()函式裡就行了。

vc++中使用mfc通過ado連線資料庫方法小結(不包括異常的捕捉)

這裡主要講mfc與access資料庫(sql2000方法差不多,主要是連線字串不同)

1、在stdafx.h標頭檔案中加入此句子

#import "c:/program files/common files/system/ado/msado15.dll" no_namespace rename("eof","rseof")//不要命名空間,重命//名eof為rseof
這句話意味使用msado15.dll動態連線庫檔案,裡面就有ado

2、實現從資料庫中提取顯示資料

coinitialize(null); //初始化com元件

_connectionptr pconn(__uuidof(connection)); //例項化乙個connection物件pconn

_recordsetptr prst(__uuidof(recordset)); //例項化乙個recordset物件prst

_commandptr pcmd(__uuidof(command)); //例項化乙個command物件pcmd

pconn->connectionstring="provider=microsoft.jet.oledb.4.0;data source=student.mdb";

//通過pconn物件連線字串,連線到access資料庫,這裡access資料庫在c根目錄下

/*pcmd->put_activeconnection(_variant_t((idispatch*)pconn));

pcmd->commandtext="select * from stu"; //通過pcmd物件訪問資料庫

prst=pcmd->execute(null,null,adcmdtext);

while(!prst->rseof)

prst->close(); //關閉物件

pconn->close();

pcmd.release(); //釋放物件

prst.release();

pconn.release();

couninitialize(); //解除安裝com元件

3、實現插入記錄

coinitialize(null);

_connectionptr pconn(__uuidof(connection));

_recordsetptr prst(__uuidof(recordset));

_commandptr pcmd(__uuidof(command));

_variant_t recordsaffected; //申請乙個_variant_t型別的的變數

pconn->connectionstring="provider=microsoft.jet.oledb.4.0;data source=student.mdb";

pconn->open("","","",adconnectunspecified);

prst=pconn->execute("insert into stu (學號,姓名,**) values ('2222','dddd','123456')",&recordsaffected,adcmdtext);

//prst->close(); //若有此句可以實現插入,但會產生runtime錯誤提示

pconn->close();

pcmd.release();

prst.release();

pconn.release();

couninitialize();

4、實現刪除記錄

coinitialize(null);

_connectionptr pconn(__uuidof(connection));

_recordsetptr prst(__uuidof(recordset));

_commandptr pcmd(__uuidof(command));

_variant_t recordsaffected; //申請乙個_variant_t型別的的變數

pconn->connectionstring="provider=microsoft.jet.oledb.4.0;data source=student.mdb";

pconn->open("","","",adconnectunspecified);

prst=pconn->execute("delete from stu where 學號='2'",&recordsaffected,adcmdtext);

pconn->close();

pcmd.release();

prst.release();

pconn.release();

couninitialize();

詳解MFC使用ADO連線SQLServer資料庫

vc用ado訪問資料庫全攻略,介紹了vc用ado來訪問資料庫的各個物件及各方法,很經典,也很實用,很值得一看。正文一 ado概述 ado是microsoft為最新和最強大的資料訪問範例 ole db 而設計的,是乙個便於使用的應用程式層介面。ado 使您能夠編寫應用程式以通過 ole.db 提供者訪...

MFC使用ado技術連線sqlserver

第一步,載入ado庫 windows 系統自帶,但需要載入進去!將下面 放入stdafx.h中最後,然後編譯即可!import c program files x86 common files system ado msado15.dll no namespace rename eof rseof ...

詳解MFC使用ADO連線SQLServer資料庫

connectionptr主要是乙個連線介面,取得與資料庫的連線。它的連線字串可以是自己直接寫,也可以指向乙個odbc dsn。connectionptr pconn if failed pconn.createinstance adodb.connection cstring strsrc str...