編者:李國帥
qq:9611153 微信lgs9611153
時間:2008-3-11
背景原因:
通路資料庫的技術有很多,比如adbc,ado,oledb等等,它們用在不同的場景,各有各自的優點和缺點。
問題描述及期望效果:
ADO (ActiveX Data Objects,ActiveX資料對象)是Microsoft提出的應用程式接口(API)用以實作通路關系或非關系資料庫中的資料。
VC中通路資料庫是常見的技術,這裡整理了調用ado技術通路MSSql資料的簡單例子。
所需資源:
VC,ADO,MSSql
例子:
導入
#include <comdef.h>
#import "C:\program files\common files\system\ado\msado15.dll" \
no_namespace \
rename( "EOF", "adoEOF" )
聲明變量
_ConnectionPtr m_pMyDb;
_RecordsetPtr m_pMySet;
使用ado通路資料庫
BOOL CDlgApp::InitInstance()
{
if(!AfxOleInit())
{
AfxMessageBox("OLE初始化出錯!");
return FALSE;
}
return FALSE;
}
int CDlgApp::ExitInstance()
{
::CoUninitialize();
return CWinApp::ExitInstance();
}
BOOL CDlgDlg::OnInitDialog()
{
CDialog::OnInitDialog();
_variant_t TheValue;
m_List.DeleteAllItems();
m_pMyDb.CreateInstance(_uuidof(Connection));
m_pMySet.CreateInstance(_uuidof(Recordset));
try
{
m_pMyDb->Open("MarketMS", "","", 0);
m_pMySet->Open("SELECT * FROM GoodsMng",
m_pMyDb.GetInterfacePtr(),
adOpenDynamic,adLockOptimistic,adCmdText);
//執行SQL語句得到一個記錄集
while(!m_pMySet->adoEOF)
//周遊所有記錄
{
TheValue = m_pMySet->GetCollect("GoodsName");
//得到字段BlockIndex的值
if(TheValue.vt!=VT_NULL)
{
m_List.InsertItem(1, (char*)_bstr_t(TheValue)); //将該值加入到清單控件中
}
m_pMySet->MoveNext();
}
m_pMySet->Close();
m_pMyDb->Close();
}
catch(_com_error e) //異常處理
{
AfxMessageBox(e.ErrorMessage());
}
m_pMySet = NULL;
m_pMyDb = NULL;
/* pCommand.CreateInstance(_uuidof(Command));
pCommand->ActiveConnection=MyDb;
pCommand->CommandText="select from some—table";
pCommand->CommandType=adCmdText;
pCommand->Parameters->Refresh();
MySet=pCommand->Execute(NULL,NULL,adCmdUnknown);
_variant_t TheValue = MySet->GetCollect("FIELD_1");
CString sValue=(char)_bstr_t(TheValue);
*/
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
return TRUE; // return TRUE unless you set the focus to a control
}