1. 一般用法

在StdAfx.h中加入下條語句:

 

#import "d:\program files\common files\system\ado\msado15.dll" \

 

no_namespace\

 

rename ("EOF", "adoEOF")

 

初始化:

 

使用之前加入語句AfxOleInit();

 

建立連接:

 

_ConnectionPtr conn;

 

conn.CreateInstance(_uuidof(Connection));

 

創建連接:

 

try

 

{

 

conn->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=TSdata.mdb",

 

"","",adModeUnknown);

 

//也可使用conn->Open("DSN=TSdata","","",adModeUnknown);

 

}

 

catch(_com_error e)

 

{

 

AfxMessageBox("資料庫連接失敗,確認資料庫TSdata.mdb是否在當前路徑下!");

 

return;

 

}

 

創建資料集:

 

recordset.CreateInstance(_uuidof(Recordset));

 

try {

 

recordset->Open(Sqlstr,//SQL語句

 

conn.GetInterfacePtr(),// 獲取庫接庫的IDispatch指標

 

adOpenDynamic,// adOpenForwardOnly 0 adOpenDynamic 2

 

adLockOptimistic,// adLockReadOnly,adLockPessimistic,adLockOptimistic

 

adCmdText //adCmdTable adCmdUnknown

 

);

 

}

 

catch(_com_error *e)

 

{

 

AfxMessageBox(e->ErrorMessage());

 

}

 

讀取資料:

 

CString id;

 

_variant_t var;

 

var=rs->GetCollect("tec_id");

 

if(var.vt!=VT_Null)

 

id=(LPCSTR)_bstr_t(var);

 

插入紀錄:

 

可以先用AddNew()方法新增一個空記錄,再用PutCollect(欄位名,值)輸入每個欄位的值,最後再Update()更新到庫中資料既可。其中變數m_Name和m_Age分別為姓名及年齡編輯方塊的成員變數:

 

try{// 寫入各欄位值

 

m_pRecordset->AddNew();

 

m_pRecordset->PutCollect("Name", _variant_t(m_Name));

 

m_pRecordset->PutCollect("Age", atol(m_Age));

 

m_pRecordset->Update();

 

AfxMessageBox("插入成功!");

 

}catch(_com_error *e)

 

{AfxMessageBox(e->ErrorMessage());}

 

移動記錄指標

 

移動記錄指標可以通過MoveFirst()方法移動到第一條記錄、MoveLast()方法移動到最後一條記錄、MovePrevious()方法移動到目前記錄的前一條記錄、MoveNext()方法移動到目前記錄的下一條記錄。但我們有時經常需要隨意移動記錄指標到任意記錄位置時,可以使用Move(記錄號)方法來實現,注意: Move()方法是相對於目前記錄來移動指標位置的,正值向後移動、負值向前移動,如:Move(3),目前記錄是3時,它將從記錄3開始往後再移動3條記錄位置。代碼如下所示

 

try

 

{

 

int curSel = m_AccessList.GetCurSel();

 

// 先將指標移向第一條記錄,然後就可以相對第一條記錄來隨意移動記錄指標

 

m_pRecordset->MoveFirst();

 

m_pRecordset->Move(long(curSel));

 

}catch(_com_error *e)

 

{

 

AfxMessageBox(e->ErrorMessage());

 

}

 

改記錄中欄位值 可以將記錄指標移動到要修改記錄的位置處,直接用PutCollect(欄位名,值)將新值寫入並Update()更新資料庫既可。可以用上面方法移動記錄指標,修改欄位值代碼如下所示:

 

try

 

{

 

// 假設對第二條記錄進行修改

 

m_pRecordset->MoveFirst();

 

m_pRecordset->Move(1); // 從0開始

 

m_pRecordset->PutCollect("Name", _variant_t(m_Name));

 

m_pRecordset->PutCollect("Age", atol(m_Age));

 

m_pRecordset->Update();

 

}

 

catch(_com_error *e)

 

{

 

AfxMessageBox(e->ErrorMessage());

 

}

 

刪除記錄

 

刪除記錄和上面修改記錄的操作類似,先將記錄指標移動到要修改記錄的位置,直接用Delete()方法刪除它並用Update()來更新資料庫既可。代碼如下所示

 

try

 

{

 

// 假設刪除第二條記錄

 

m_pRecordset->MoveFirst();

 

m_pRecordset->Move(1); // 從0開始

 

m_pRecordset->Delete(adAffectCurrent); // 參數adAffectCurrent為刪除目前記錄

 

m_pRecordset->Update();

 

}

 

catch(_com_error *e)

 

{

 

AfxMessageBox(e->ErrorMessage());

 

}

 

關閉記錄集

 

直接用Close方法關閉記錄集並賦于其空值。代碼如下所示:

 

m_pRecordset->Close();

 

m_pRecordset = Null;

 

CommandPtr智慧指標,可以使用_ConnectionPtr或_RecordsetPtr來執行任務,定義輸出參數,執行預存程序或SQL語句。

 

執行SQL語句

 

先創建一個_CommandPtr實例指標,再將庫連接和SQL語句做為參數,執行Execute()方法既可。代碼如下所示

 

_CommandPtr m_pCommand;

 

m_pCommand.CreateInstance(__uuidof(Command));

 

m_pCommand->ActiveConnection = m_pConnection; // 將庫連接賦于它

 

m_pCommand->CommandText = "SELECT * FROM DemoTable"; // SQL語句

 

m_pRecordset = m_pCommand->Execute(Null, Null,adCmdText); // 執行SQL語句,返回記錄集

 

執行預存程序

 

執行預存程序的操作和上面執行SQL語句類似,不同點僅是CommandText參數中不再是SQL語句,而是預存程序的名字,如Demo。另一個不同點就是在Execute()中參數由adCmdText(執行SQL語句),改為adCmdStoredProc來執行預存程序。如果預存程序中存在輸入、輸出參數的話,需要使用到另一個智慧指標_ParameterPtr來逐次設置要輸入、輸出的參數資訊,並將其賦于_CommandPtr中Parameters參數來傳遞資訊,有興趣的讀者可以自行查找相關書籍或MSDN。執行預存程序的代碼如下所示:

 

_CommandPtr m_pCommand;

 

m_pCommand.CreateInstance(__uuidof(Command));

 

m_pCommand->ActiveConnection = m_pConnection; // 將庫連接賦于它

 

m_pCommand->CommandText = "Demo";

 

m_pCommand->Execute(Null,Null, adCmdStoredProc);
arrow
arrow
    全站熱搜

    戮克 發表在 痞客邦 留言(0) 人氣()