ADO编程总结(二)(整理)由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“ado编程总结二”。
ADO编程总结
(二)Connection,Recordset,Command对象都可以对数据库进行访问,并对数据库进行操作,以下是实验例程,由以下例程可见,读取数据库都要用到Recordset对象,而Recordset和command虽然都可以不需要connection对象而独自对数据库访问(例程在此为给出,可查我在《Visual c++6.0开发指南》上所夹的打印资料),但最方便的方法还是先用connection对象建立对数据库的连接,然后以此conection对象作为Recordset和command的open参数,打开数据库。
使用ConnectionPtr接口访数据库,并添加数据
1、创建_ConnetionPtr对象并实例化
2、调用Open方法访数据库
3、调用Execute方法,执行SQL命令
4、例程如下:
//1 建立连接
_ConnectionPtr pCon;
HRESULT hr;
try
{
hr=pCon.CreateInstance(_uuidof(Connection));
if(FAILED(hr))
{
AfxMeageBox(“Create Connection Instance Failed!”);
return;
}
pCon->ConnectionString=“File Name=mydata.udl”;
pCon->ConnectionTimeout=20;
hr=pCon->Open(“”,“”,“”,adConnectUnspecified);
if(FAILED(hr))
{
AfxMeageBox(“Open Connection Failed!”);
return;
}
//2 利用Connection对象,为数据库添加数据CString strSQL=“insert into DVDData values(1006,'新闻联播','2010-2-12',3)”;COleVariant vtOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);pRecordset=pCon->Execute(_bstr_t(strSQL),&vtOptional,-1);pCon.Release();} catch(_com_error e){bstr_t bstrSource(e.Source());_bstr_t bstrDescription(e.Description());
} return;
使用RecordsetPtr接口访问数据库
1、创建_RecordsetPtr对象并实例化
2、调用Open方法访问数据库,数据源来自已建立连接的Connetcion对象
3、调用GetCollect方法获取数据库中的数据
4、例程如下:
_ConnectionPtr pCon;
_RecordsetPtr pRecordset;
HRESULT hr;
try
{
hr=pCon.CreateInstance(_uuidof(Connection));
if(FAILED(hr))
{
AfxMeageBox(“Create Connection Instance Failed!”);
return;
}
pCon->ConnectionString=“File Name=mydata.udl”;
pCon->ConnectionTimeout=20;
hr=pCon->Open(“”,“”,“”,adConnectUnspecified);
if(FAILED(hr))
{
AfxMeageBox(“Open Connection Failed!”);
return;
}
//2 利用Recordset对象,读取数据库数据
hr=pRecordset.CreateInstance(_uuidof(Recordset));
if(FAILED(hr))
{
AfxMeageBox(“Create Recordset Instance Failed!”);
return;
}
CString strSQL=“select * from DVDData”;
hr=pRecordset->Open(_variant_t(strSQL),pCon.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);if(FAILED(hr))
{
AfxMeageBox(“Open Recordset Failed!”);
return;
}
_variant_t var;CString strValue;while(!pRecordset->rsEOF){c=m_datalist.GetItemCount();var=pRecordset->GetCollect(“编号”);if(var.vt!=VT_NULL)strValue=(LPCSTR)_bstr_t(var);m_datalist.InsertItem(c,strValue);var=pRecordset->GetCollect(“名称”);if(var.vt!=VT_NULL)strValue=(LPCSTR)_bstr_t(var);m_datalist.SetItemText(c,1,strValue);
var=pRecordset->GetCollect(“日期”);
if(var.vt!=VT_NULL)
strValue=(LPCSTR)_bstr_t(var);
m_datalist.SetItemText(c,2,strValue);
var=pRecordset->GetCollect(“数目”);
if(var.vt!=VT_NULL)
strValue=(LPCSTR)_bstr_t(var);
m_datalist.SetItemText(c,3,strValue);
pRecordset->MoveNext();
}
}
catch(_com_error e)
{
bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description());
AfxMeageBox(bstrSource+bstrDescription);
return;
}
pRecordset->Close();
pRecordset=NULL;
pCon.Release();
5、为数据库添加数据
pRecordset->AddNew();
CString strNum;
strNum.Format(“%d”,m_number);
pRecordset->PutCollect(“编号”,_variant_t(strNum));
pRecordset->PutCollect(“名称”,_variant_t(m_name));pRecordset->PutCollect(“日期”,_variant_t(m_date));pRecordset->PutCollect(“数目”,_variant_t(m_count));pRecordset->Update();
使用Command对象打开数据库
1、定义_CommandPtr、_RecordsetPtr对象实例化_CommandPtr对象
2、使用Execute方法执行SQL命令,返回结果保存在Recordset对象中。
3、使用RecordsetPtr的GetCollect方法获取数据
4、例程如下:
_CommandPtr pCommand;
_RecordsetPtr pRecordset;
_ConnectionPtr pCon;
HRESULT hr;
try
{
hr=pCon.CreateInstance(_uuidof(Connection));
if(FAILED(hr))
{
AfxMeageBox(“Create Connection Instance Failed!”);return;
}
pCon->ConnectionString=“File Name=mydata.udl”;
pCon->ConnectionTimeout=20;
hr=pCon->Open(“”,“”,“”,adConnectUnspecified);
if(FAILED(hr))
{
AfxMeageBox(“Open Connection Failed!”);
return;
}
pCommand.CreateInstance(_uuidof(Command));
pCommand->ActiveConnection=pCon;
pCommand->CommandText=“select * from DVDData”;
pCommand->Parameters->Refresh();
pRecordset=pCommand->Execute(NULL,NULL,adCmdText);
int c;
_variant_t var;
CString strValue;
while(!pRecordset->rsEOF)
{
c=m_datalist.GetItemCount();
var=pRecordset->GetCollect(“编号”);
}if(var.vt!=VT_NULL)strValue=(LPCSTR)_bstr_t(var);m_datalist.InsertItem(c,strValue);var=pRecordset->GetCollect(“名称”);if(var.vt!=VT_NULL)strValue=(LPCSTR)_bstr_t(var);m_datalist.SetItemText(c,1,strValue);var=pRecordset->GetCollect(“日期”);if(var.vt!=VT_NULL)strValue=(LPCSTR)_bstr_t(var);m_datalist.SetItemText(c,2,strValue);var=pRecordset->GetCollect(“数目”);if(var.vt!=VT_NULL)strValue=(LPCSTR)_bstr_t(var);m_datalist.SetItemText(c,3,strValue);pRecordset->MoveNext();} } catch(_com_error e){bstr_t bstrSource(e.Source());_bstr_t bstrDescription(e.Description());AfxMeageBox(bstrSource+bstrDescription);return;} pRecordset->Close();pRecordset=NULL;pCon.Release();