DAO(Data Access Object)是基于OLE DB的COM组件,利用它可以非常容易访问各种数据库,这里介绍用DAO方法访问Microsoft SQL Server的方法。
(使用DAO之前要调用AfxOleInit()函数)
关键类:CDaoDatabase类、CDaoRecordset类、COleVariant类的使用。
关键函数:CDaoDatabase::Open(…)、CDaoRecordset::Open(…)等
代码示例:(必须包含库文件#include <afxdao.h>)
CDaoDatabase *db = new CDaoDatabase();
CString connstr;
//注意alex//alexnet,中的” //”
connstr = "ODBC;DRIVER={SQL Server};SERVER=alex//alexnet;DATABASE=statistics;UID=sa;PWD=110";
db->Open(NULL,0,0,connstr);
CDaoRecordset *rs = new CDaoRecordset(db);
//注意对于具有IDENTITY的表要有dbSeeChanges选项,定义在RecordsetOptionEnum结构中
rs->Open(AFX_DAO_USE_DEFAULT_TYPE,"select * from year_table",dbSeeChanges);
rs->MoveFirst();
COleVariant value;
rs->GetFieldValue("param",value);
AfxMessageBox((LPCTSTR)value.pbstrVal); //只是显示一个结果看看
rs->Close();
db->Close();
delete rs;
delete db;
rs = NULL;
db = NULL;
从以上代码可以看出,利用DAO访问数据库十分容易,在任何一种语言中都几乎一样的方法.
以下是更加详细的代码:
void CDAO_ListCtrlDlg::GetData() //自己定义的函数
{
// m_DaoList是ClistCtrl的对象,在CDao_ListCtrlDlg类中
CDaoDatabase *db = new CDaoDatabase();
CString ConnStr="ODBC;DRIVER={SQL Server};SERVER = alex//alexnet;DATABASE=statistics;UID=sa;PWD=110";
db->Open(NULL,0,0,ConnStr);
CDaoRecordset *rs;
rs = new CDaoRecordset(db);
rs->Open(AFX_DAO_USE_DEFAULT_TYPE,"select * from month_table",dbSeeChanges);
COleVariant var;
int FieldCount = rs->GetFieldCount();
CDaoFieldInfo FieldInfo;
int i,j;
for (i = 0;i<FieldCount;i++)
{
rs->GetFieldInfo(i,FieldInfo);
m_DaoList.InsertColumn(i,FieldInfo.m_strName,LVCFMT_CENTER,100);
}
long RecordCount=rs->GetRecordCount();
rs->MoveFirst();
CString id;
i = 0;
while (rs->IsEOF()!=TRUE)
{
rs->GetFieldValue(0,var);
id.Format("%d",var.iVal);
m_DaoList.InsertItem(i,id);
for (j = 1;j<FieldCount;j++)
{
rs->GetFieldValue(j,var);
m_DaoList.SetItemText(i,j,(LPCTSTR)var.pbstrVal);
}
rs->MoveNext();
i++;
}
rs->Close();
delete rs;
db->Close();
delete db;
rs = NULL;
db = NULL;
}