在Visual C++中用ADO進行資料庫程式設計 (轉)
在Visual C++中用ADO進行資料庫程式設計 (轉)[@more@]在Visual C++中用ADO進行 作者: 蔣東宇
轉自:
資料(ADO)是OLE 上面的高層資料庫。我們在C++中也可以ADO。本文將在6.0環境下做一個小小的例子解釋如何使用ADO。
1. 生成應用程式並初始化OLE/COM庫環境
建立一個標準的MFC AppWizard(exe)應用程式,然後在應用程式類的InitInstance中初始化OLE/COM庫(因為ADO庫是一個DLL庫)。
BOOL CADOTestApp::InitInstance()
{ //初始化OLE/COM庫環境
AfxOleInit();}
2. 引入ADO庫
使用ADO前必須在工程的stdafx.h檔案裡用直接引入符號#import引入ADO庫檔案,以使能正確編譯。程式碼如下:
#include 〈comdef.h〉
#import "c:program filescommon filessystemadomsado15.dll"
no_namespace
rename ("EOF","adoEOF")
標頭檔案comdef.h使我們的應用程式能夠使用Visual C++中的一些特殊COM支援類,這些類使得處理OLE自治更為容易一些,OLE自治是ADO使用的資料型別。後三行使用#import指令在我們的應用程式中輸入ADO類庫定義。
ADO類的定義是作為一種資源在ADO DLL(msado15.dll)中,在其內部稱為型別庫。型別庫描述了自治介面,以及C++使用的COM vtable介面。當使用#import指令時,在執行時Visual C++需要從ADO DLL中讀取這個型別庫,並以此建立一組C++標頭檔案。這些標頭檔案具有.tli 和.tlh副檔名,讀者可以在專案的目錄下找到這兩個檔案。在C++程式程式碼中呼叫的ADO類要在這些檔案中定義。
程式的第三行指示ADO物件不使用名稱空間。在有些應用程式中,由於應用程式中的物件與ADO中的物件之間可能會出現命名衝突,所以有必要使用名稱空間。如果要使用名稱空間,則可把第三行程式修改為: rename_namespace("AdoNS")。第四行程式碼將ADO中的EOF(檔案結束)更名為adoEOF,以避免與定義了自己的EOF的其他庫衝突。
3.利用智慧指標進行資料庫操作
在CaboutDlg標頭檔案中定義兩個ADO智慧指標類例項,並在對話方塊中加入一個ListCtrl。
_ConnectionPtr m_pConnection;
_RecordsetPtr m_pRecordset;
ClistCtrl m_List;
ADO庫包含三個智慧指標:_ConnectionPtr、_CommandPtr和_RecordsetPtr。
_ConnectionPtr通常被用來建立一個資料連線或一條不返回任何結果的語句,如一個。
_CommandPtr返回一個記錄集。它提供了一種簡單的方法來執行返回記錄集的儲存過程和SQL語句。在使用_CommandPtr介面時,可以利用全域性_ConnectionPtr介面,也可以在_CommandPtr介面裡直接使用連線串。
_RecordsetPtr是一個記錄集物件。與以上兩種物件相比,它對記錄集提供了更多的控制功能,如記錄鎖定、遊標控制等。
在OnInitDialog()中加入以下程式碼:
BOOL CAboutDlg::OnInitDialog()
{
CDialog::OnInitDialog();
_variant_t TheValue;
m_List.ResetContent();
m_pConnection.CreateInstance(_uuidof(Connection));
m_pRecordset.CreateInstance(_uuidof(Recordset));
try{
m_pConnection->Open("DSN=ADOTest","","",0); //連線叫作ADOTest的ODBC資料來源
m_pRecordset->Open(" * FROM BlockDefine",(IDispatch*)m_pConnection,
adOpenDynamic,
adLockOptimistic,
adCmdText);
//執行SQL語句得到一個記錄集
while(!m_pRecordset->adoEOF)
//遍歷所有記錄
{
TheValue = m_pRecordset->GetCollect("BlockIndex");
//得到欄位BlockIndex的值
if(TheValue.vt!=VT_NULL)
m_List.AddString((char*)_bstr_t(TheValue)); //將該值加入到列表中
m_pRecordset->MoveNext();
}
m_pRecordset->Close();
m_pConnection->Close();
}
catch(_com_error e) //異常處理
{
AfxMessageBox(e->ErrorMessage());
}
m_pRecordset = NULL;
m_pConnection = NULL;
return TRUE; // return TRUE unless you set the focus to a control
}
程式中透過_variant_t和_bstr_t轉換COM物件和C++型別的資料, _variant_t類封裝了OLE自治VARIANT資料型別。在C++中使用_variant_t類要比直接使用VARIANT資料型別容易得多。
好,編譯後該程式就能執行了,但記住執行前要建立一個叫ADOTest的ODBC資料來源。該程式將把表BlockDefine中的BlockIndex欄位值顯示在列表控制元件中。
轉自:
資料(ADO)是OLE 上面的高層資料庫。我們在C++中也可以ADO。本文將在6.0環境下做一個小小的例子解釋如何使用ADO。
1. 生成應用程式並初始化OLE/COM庫環境
建立一個標準的MFC AppWizard(exe)應用程式,然後在應用程式類的InitInstance中初始化OLE/COM庫(因為ADO庫是一個DLL庫)。
BOOL CADOTestApp::InitInstance()
{ //初始化OLE/COM庫環境
AfxOleInit();}
2. 引入ADO庫
使用ADO前必須在工程的stdafx.h檔案裡用直接引入符號#import引入ADO庫檔案,以使能正確編譯。程式碼如下:
#include 〈comdef.h〉
#import "c:program filescommon filessystemadomsado15.dll"
no_namespace
rename ("EOF","adoEOF")
標頭檔案comdef.h使我們的應用程式能夠使用Visual C++中的一些特殊COM支援類,這些類使得處理OLE自治更為容易一些,OLE自治是ADO使用的資料型別。後三行使用#import指令在我們的應用程式中輸入ADO類庫定義。
ADO類的定義是作為一種資源在ADO DLL(msado15.dll)中,在其內部稱為型別庫。型別庫描述了自治介面,以及C++使用的COM vtable介面。當使用#import指令時,在執行時Visual C++需要從ADO DLL中讀取這個型別庫,並以此建立一組C++標頭檔案。這些標頭檔案具有.tli 和.tlh副檔名,讀者可以在專案的目錄下找到這兩個檔案。在C++程式程式碼中呼叫的ADO類要在這些檔案中定義。
程式的第三行指示ADO物件不使用名稱空間。在有些應用程式中,由於應用程式中的物件與ADO中的物件之間可能會出現命名衝突,所以有必要使用名稱空間。如果要使用名稱空間,則可把第三行程式修改為: rename_namespace("AdoNS")。第四行程式碼將ADO中的EOF(檔案結束)更名為adoEOF,以避免與定義了自己的EOF的其他庫衝突。
3.利用智慧指標進行資料庫操作
在CaboutDlg標頭檔案中定義兩個ADO智慧指標類例項,並在對話方塊中加入一個ListCtrl。
_ConnectionPtr m_pConnection;
_RecordsetPtr m_pRecordset;
ClistCtrl m_List;
ADO庫包含三個智慧指標:_ConnectionPtr、_CommandPtr和_RecordsetPtr。
_ConnectionPtr通常被用來建立一個資料連線或一條不返回任何結果的語句,如一個。
_CommandPtr返回一個記錄集。它提供了一種簡單的方法來執行返回記錄集的儲存過程和SQL語句。在使用_CommandPtr介面時,可以利用全域性_ConnectionPtr介面,也可以在_CommandPtr介面裡直接使用連線串。
_RecordsetPtr是一個記錄集物件。與以上兩種物件相比,它對記錄集提供了更多的控制功能,如記錄鎖定、遊標控制等。
在OnInitDialog()中加入以下程式碼:
BOOL CAboutDlg::OnInitDialog()
{
CDialog::OnInitDialog();
_variant_t TheValue;
m_List.ResetContent();
m_pConnection.CreateInstance(_uuidof(Connection));
m_pRecordset.CreateInstance(_uuidof(Recordset));
try{
m_pConnection->Open("DSN=ADOTest","","",0); //連線叫作ADOTest的ODBC資料來源
m_pRecordset->Open(" * FROM BlockDefine",(IDispatch*)m_pConnection,
adOpenDynamic,
adLockOptimistic,
adCmdText);
//執行SQL語句得到一個記錄集
while(!m_pRecordset->adoEOF)
//遍歷所有記錄
{
TheValue = m_pRecordset->GetCollect("BlockIndex");
//得到欄位BlockIndex的值
if(TheValue.vt!=VT_NULL)
m_List.AddString((char*)_bstr_t(TheValue)); //將該值加入到列表中
m_pRecordset->MoveNext();
}
m_pRecordset->Close();
m_pConnection->Close();
}
catch(_com_error e) //異常處理
{
AfxMessageBox(e->ErrorMessage());
}
m_pRecordset = NULL;
m_pConnection = NULL;
return TRUE; // return TRUE unless you set the focus to a control
}
程式中透過_variant_t和_bstr_t轉換COM物件和C++型別的資料, _variant_t類封裝了OLE自治VARIANT資料型別。在C++中使用_variant_t類要比直接使用VARIANT資料型別容易得多。
好,編譯後該程式就能執行了,但記住執行前要建立一個叫ADOTest的ODBC資料來源。該程式將把表BlockDefine中的BlockIndex欄位值顯示在列表控制元件中。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-988668/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 使用Visual Studio Code進行MicroPython程式設計Python程式設計
- C++ 用libcurl庫進行http通訊網路程式設計C++HTTP程式設計
- 在RAC中用NID修改資料庫名稱資料庫
- 簡述在ADO中使用介面的抽象資料提供程式以及ADO.NET資料提供程式工廠模型抽象模型
- Visual C++網路程式設計案例實戰pdfC++程式設計
- [譯]在HealthKit中用 Swift 進行睡眠分析Swift
- 在Javascript中進行面向切面程式設計JavaScript程式設計
- 資料庫實驗五:資料庫程式設計資料庫程式設計
- 資料庫實驗八 資料庫程式設計資料庫程式設計
- 【資料庫設計】資料庫的設計資料庫
- 42. 資料庫程式設計資料庫程式設計
- Python SQLite資料庫程式設計PythonSQLite資料庫程式設計
- 精通Visual C++圖象程式設計------讀書筆記8C++程式設計筆記
- 精通Visual C++圖象程式設計---讀書筆記6.2C++程式設計筆記
- 精通Visual C++圖象程式設計---讀書筆記6.1C++程式設計筆記
- 精通Visual C++圖象程式設計---讀書筆記5C++程式設計筆記
- Microsoft Visual C++ 微軟常用執行庫合集ROSC++微軟
- 使用SQL_TRACE進行資料庫診斷(轉)SQL資料庫
- Go Web 程式設計之 資料庫GoWeb程式設計資料庫
- 抽獎小程式資料庫設計資料庫
- Visual C++程式設計實戰寶典pdf 李琳娜,與光碟C++程式設計
- c++ 16進位制資料轉doubleC++
- 為什麼大批的JAVA程式設計師都是在轉大資料Java程式設計師大資料
- 在 Visual Studio 中更好地進行搜尋
- Go Web 程式設計--應用資料庫GoWeb程式設計資料庫
- java 資料庫程式設計(一)JDBC連線Sql Server資料庫Java資料庫程式設計JDBCSQLServer
- [轉]32th@深入解析C++併發程式設計:從多執行緒到現代C++併發庫@20240616C++程式設計執行緒
- 半路轉行學程式設計還來得及嗎?半路轉行如何學程式設計?程式設計
- Linux C++ 多執行緒程式設計LinuxC++執行緒程式設計
- 在Kotlin中如何利用協程進行非同步程式設計Kotlin非同步程式設計
- SQL對資料進行按月統計或對資料進行按星期統計的例項程式碼SQL
- .NET併發程式設計-資料並行程式設計並行
- ADO.NET入門教程之資料庫連線池資料庫
- Oracle資料庫關於SQL的執行計劃(轉)Oracle資料庫SQL
- Java程式設計基礎31——MySql資料庫Java程式設計MySql資料庫
- 程式設計師面試之MySQL資料庫表的設計程式設計師面試MySql資料庫
- limanmanExp資料庫審計設計思路與重要程式碼資料庫
- ElasticSearch + Logstash進行資料庫同步Elasticsearch資料庫
- 2024.11.5(資料庫設計)資料庫