任何的程式設計都離不開資料庫的應用,資料庫訪問方式有ado、dao、odbc、rdo、bde......,正因為有這麼多的資料庫訪問方式,往往由於資料庫方式的不同其達到的功能也不同,乙個大型軟體專案各個模組的不同或乙個開發小組各個成員掌握的資料庫訪問方式熟練程度的不同,都會出現乙個軟體專案使用幾種資料庫訪問方式的情況。這時就會出現資料庫訪問方式衝突的問題。相信解決這種衝突的方法不止一種,但相信名字空間是最簡單也是最容易讓人一目了然的方法。
下面以vc下ado的資料庫訪問方式舉例。
先簡單說說ado(總結)。
在vc中使用ado的開發步驟:
1,引入ado庫檔案
在工程的stdafx.h裡用#import引入ado庫檔案。
#import "c:/program files/common files/system/ado/msado15.dll" no_namespace rename("bof","adobof") rename("eof","adoeof")
2, 初始化com環境
::coinitialize(null); //初始化ole/com庫環境
::couninitialize(); //關閉ole/com庫環境,釋放資源
afxoleinit();//初始化ole/com庫環境(mfc自帶的)
3,使用ado庫的三個基本介面
ado庫包含三個基本介面:_connectionptr介面、_recordsetptr介面和_commandptr介面。
其分別對應connection物件(完成應用程式對資料來源的訪問連線)、recordset物件(將查詢的結果以記錄集的方式儲存)和command物件(對已連線的資料來源進行命令操作)。
定義物件並建立物件例項:
方法一:
_connectionptr m_pconnection;
_recordsetptr m_precordset;
_commandptr m_pcommand;
m_pconnection.createinstance(__uuidof(connection));
m_precordset.createinstance(__uuidof(recordset));
m_pcommand.createinstance(__uuidof(command));
方法二:
_connectionptr m_pconnection("adodb.connection");
_recordsetptr m_precordset("adodb.recordset");
_commandptr m_pcommand("adodn.command");
方法三:
_connectionptr m_pconnection;
_recordsetptr m_precordset;
_commandptr m_pcommand;
m_pconnection.createinstance("adodb.connection");
m_precordset.createinstance("adodb.recordset");
m_pcommand.createinstance("adodn.command");
這三種方法都是一樣的,關鍵看你喜好。
m_pcommand->activeconnection = m_pconnection;
m_pcommand->commandtype = adcmdstoredproc;
m_pcommand->commandtext = _bstr_t("p_mail_send");
trycatch (...)
trycatch (...)
m_pcommand.detach();
ado(總結)說完了,我們進入正題。
如:置身於某個開發小組中,乙個大的軟體已經形成,但是資料庫訪問方式用的是dao或別的不是ado的方式。現給你乙個模組通過資料庫介面
實現某些未完成的功能,這時就會有資料庫的衝突問題。下面我們看看名字空間是怎麼解決這個衝突問題的。
我們還按在vc中使用ado的開發步驟來。
在vc中使用ado的開發步驟(名字空間):
1,引入ado庫檔案
在工程的stdafx.h裡用#import引入ado庫檔案。
這時往往就不是在stdafx.h裡用#import引入ado庫檔案了,而是在你要使用ado訪問方式的工程類的.h中引入了。
#import "c:/program files/common files/system/ado/msado15.dll" rename_namespace("arxado") rename("bof","adobof")
m_pcommand->activeconnection = m_pconnection;
m_pcommand->commandtype = arxado::adcmdstoredproc;
m_pcommand->commandtext = _bstr_t("p_mail_send");
trycatch (...)
trycatch (...)
m_pcommand.detach();
方法很簡單。卻是開發中的精髓所在。
由於是個人寫作,難免會有不正確或不恰當之處,敬請大家不吝賜教。
joinclear
2005-9-11
資料庫主鍵衝突解決
參考 順便介紹一種剛發現的解決360doc無法複製的問題 右擊 檢視源 全部複製 新建乙個html文件,貼上進去用瀏覽器開啟即可 新增資料的基本語法為 insert into 表名 字段列表 values 值列表 在資料插入的時候,假設主鍵對應的值已經存在,則插入失敗!這就是主鍵衝突。當主鍵存在衝突...
C 內部類(解決名字衝突問題一)
將內部類看成普通成員,符合普通成員的規則,用法就是正常類的使用方法。把乙個類的定義寫在另乙個類的內部,則成裡面的這個類為內部類。例如,下面 中的inner類 include include class test int main 注意 內部類和外部類互相沒有特權 他們不是朋友關係 他們不是父子關係 ...
解決國外空間access資料庫亂碼問題
前幾天有個朋友從國外買了乙個 asp空間 今天把 上傳之後發現所有從access資料庫讀取的資料都是亂碼,實在找不到好的解決方法後過來問我。具體情況是這樣的 非程式生成的文字可以顯示。但程式生成的文字就只有e文可以顯示了,中文全是?號。可惜我用asp的那陣沒用過國外空間,還真沒碰到過asp讀取acc...