有關ADO

1、導入庫文件 

使用ADO前必須在工程的stdafx.h文件最後用直接引入符號#import引入ADO庫文件,以使編譯器能正確編譯。代碼如下: 
#import "C:Program Filescommon filessystemadomsado15.dll" no_namespace rename("EOF","EndOfFile") rename("BOF","FirstOfFile") 

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的其他庫衝突。 

2、初始化COM環境 
(1)::CoInitialize(NULL); //初始化OLE/COM庫環境 
:: CoUninitialize();//既然初始化了環境,當然就有必要釋放他了 
(2)也可以調用MFC全局函數 
AfxOleInit(); 

3、三大對象的定義和創建實例 

(1) _ConnectionPtr pConnection("ADODB.Connection"); 
_RecordsetPtr pRecordset("ADODB.Recordset"); 
_CommandPtr pCommand("ADODN.Command"); 

(2) _ConnectionPtr pConnection; 
_RecordsetPtr pRecordset; 
_CommandPtr pCommand; 

pConnection.CreateInstance(__uuidof(Connection)); 
pRecordset.CreateInstance(__uuidof(Recordset)); 
pCommand.CreateInstance(__uuidof(Command)); 

(3) _ConnectionPtr pConnection; 
_RecordsetPtr pRecordset; 
_CommandPtr pCommand; 

pConnection.CreateInstance("ADODB.Connection"); 
pRecordset.CreateInstance("ADODB.Recordset"); 
pCommand.CreateInstance("ADODB.Command"); 

4、打開一個連接 
pConnection->Open(ConnectionString,"","",adModeUnknown);///連接數據庫 

上面的連接字符串ConnectionString根據不同的數據源,分別對應不同的寫法 
1)訪問Access 2000 
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=databaseName;User ID=userName;Password=userPassWord" 

2)訪問ODBC數據 
" Provider=MADASQL;DSN=dsnName;UID=userName;PWD=userPassword;" 

3)訪問Oracle數據庫 
“Provider=MSDAORA;Data Sourse=serverName;User ID=userName;Password=userPassword;" 

3)訪問MS SQL數據庫 
"Provider=SQLOLEDB,Data Source=serverName;Initial Catalog=databaseName;User ID=userName;Password=userPassword;" 

4、執行SQL命令 
SQL命令比較多,但是不去考慮細節,這裏只說出通用的方法 
CString strSQL;//定義SQL命令串,用來保存SQL語句 

strSQL.Format("SQL statement"); 

然後在每個要用到SQL命令串的方法中,使用strSQL.AllocSysString()的方法進行類型轉換 

5、com的專用數據類型 

variant ,bstr ,SafeArray 

variant變量的範圍包括很多,使用_variant_t 進行管理 
bstr是一種字符串變量,使用_bstr_t進行管理 

6、關閉連接 

if(m_pConnection->State)//不能多次關閉,否則會出現錯誤 
m_pConnection->Close(); 

7、結構化異常處理 
ADO封裝了COM接口,所以需要進行錯誤處理 
如下例: 
HRESULT hr; 
try 

hr = m_pConnection.CreateInstance("ADODB.Connection");///創建Connection對象 
if(SUCCEEDED(hr)) 

hr = m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb","","",adModeUnknown);///連接數據庫 
///上面一句中連接字串中的Provider是針對ACCESS2000環境的,對於ACCESS97,需要改 爲:Provider=Microsoft.Jet.OLEDB.3.51; } 

catch(_com_error e)///捕捉異常 

CString errormessage; 
errormessage.Format("連接數據庫失敗!rn錯誤信息:%s",e.ErrorMessage()); 
AfxMessageBox(errormessage);///顯示錯誤信息 


8、錯誤原因的分析 
(1)不支持接口,可能是不能插入空值 

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章