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);
全站熱搜
留言列表