有關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)不支持接口,可能是不能插入空值
使用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)不支持接口,可能是不能插入空值
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.