现在的位置: 首页 > 综合 > 正文

利用DAO访问SQL数据库

2013年10月15日 ⁄ 综合 ⁄ 共 1930字 ⁄ 字号 评论关闭
   

        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;
 
}

 

抱歉!评论已关闭.