這些天一直在學習ADO 數據庫連接,感覺比較復雜,所以一邊學習,一邊使用,一邊做了一些筆記,下面的一些東西就是我總結的一些關於ADO數據庫連接方面的東西,因為是筆記,所以不一定很有序,貼出來的意思一方面是可以給大家一個參考,一邊也有希望大家一起來完善的意思,其中錯誤和不足之處當然希望大家可以及時地通知我,在貼上來的時候,我有一個想法,因為我在使用的過程中,總是會遇上一些莫明其妙的錯誤,所以我想大家有可能也會遇上,於是,我給出了一個錯誤總結,當然這裡就需要大家一起來完善了,如果大家有什麼心得和見解,希望在評論中留言,我會及時地接受大家的意見並把他們加進來(當然是在得到您的允許的情況下)
1、導入庫文件
使用ADO前必須在工程的stdafx.h文件最後用直接引入符號#import引入ADO庫文件,以使編譯器能正確編譯。代碼如下:
#import "C:\Program Files\common files\system\ado\msado15.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("連接數據庫失敗!\r\n錯誤信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);///顯示錯誤信息
}
8、錯誤原因的分析
(1)不支持接口,可能是不能插入空值
好了,希望大家可以跟我一起完善這篇總結!