VS2008数据库操作

转自:http://hi.baidu.com/kmust_weiwei/blog/item/9dfbceda782881193af3cf0e.html

MFC提供对数据库编程的强大支持。对数据库访问,MFC提供两组类:ODBC(Open DataBase Connectivity)DAO(DataBase Access Object)

MFCODBC类对较复杂的ODBC API进行了封装,提供了简化的通用接口。

MFCODBC类主要包括以下几类:

1)  CDatabase类:建立与数据库的链接。

2)  CRecordset类:该类代表从数据源选择的一组记录(记录集),通过该类可对记录集中的记录进行滚动、修改、增加和删除等操作。

3)  CRecordView类:提供了一个表单视图与某个记录集直接相连,利用对话框数据就交换机制(DDX)在记录集与表单视图的控件之间传输数据。该类支持对记录的浏览和更新。

4)  CFileExchange类:支持记录字段数据交换(DFX)

5)  CDBException类:代表ODBC类产生的异常。

概括讲,CDatabase针对某个数据库,它负责连接数据源;CRecordset针对数据源中的记录集,它负责对记录的操作;CRecordView负责界面,而CFileExchange负责CRecordset与数据源的数据交换。

 

步骤:

创建一个基于MFC对话框的程序。添加四个按钮:连接、查询、添加、删除,并添加一个ListBox,对于变量m_List,用于显示数据。

1)  连接按钮响应函数

###############################

if(!IsOpenODBC())

    MessageBox(_T("数据库开启失败。。。"),_T("数据库管理"),MB_OK);

else

    MessageBox(_T("数据库管理ODBC开启成功!"),_T("数据库管理"),MB_OK);

###############################

2)  *Dlg.h头文件中添加BOOL IsOpenODBC()成员函数,并在*Dlg.cpp中实现。

BOOL CtestDlg::IsOpenODBC()

{

    int boll = 0;

    CDatabase odbc;

    TRY

    {

        odbc.Open(_T("test"),FALSE,FALSE,_T("ODBC;UID=sa"));

        return TRUE;

    }

    CATCH_ALL(e)

    {

        return FALSE;

    }

    END_CATCH_ALL

}

3)  查询按钮响应函数

###############################

CDatabase myMdb;

myMdb.Open(_T("test"),FALSE,FALSE,_T("ODBC;UID=sa"));

 

CRecordset tmpRS(&myMdb);

tmpRS.Open(CRecordset::forwardOnly,_T("SELECT * FROM data"));

 

CString szResult;

while(!tmpRS.IsEOF())

{

    tmpRS.GetFieldValue(_T("Name"),szResult);

    m_List.AddString(szResult);

    tmpRS.MoveNext();

}

tmpRS.Close();

myMdb.Close();

###############################

4)  添加按钮事件

因为这里建立的是基于对话框的应用程序,所以首先用添加类向导在项目里派生一个基类为CRecordsetCdata类,在向导中要选择数据源和数据表,就选择先前创建好的数据源。

创建完成,会生成一个Cdata类,在data.h中添加一个函数声明:

Stactic void button11();

data.cpp中实现这个函数:

###############################

CDatabase myMdb;

    myMdb.Open(_T("test"),FALSE,FALSE,_T("ODBC;UID=sa"),TRUE);

    MessageBox(AfxGetMainWnd()->m_hWnd,_T("数据库管理ODBC开启成功。"),_T("数据库管理"),MB_OK);

    

    Cdata tmpRS(&myMdb);

    if(!tmpRS.Open())

        MessageBox(AfxGetMainWnd()->m_hWnd,_T("连接失败"),_T("错误信息"),MB_OK);

    if(!tmpRS.CanAppend())

        MessageBox(AfxGetMainWnd()->m_hWnd,_T("不能添加记录到数据库"),_T("错误信息"),MB_OK);

    

    tmpRS.AddNew();

    tmpRS.m_Name = _T("人名大会堂");

    tmpRS.m_Number = _T("55555");

    tmpRS.m_Scoreoo = 100;

    

    tmpRS.Update();

    tmpRS.Close();

    myMdb.Close();

###############################

添加按钮事件添加响应函数:

Cdata::button11();

5)  删除事件

###############################

CDatabase  m_dbCust;

CString sql = _T("delete * from data");

m_dbCust.Open(_T("test"),FALSE,FALSE,_T("ODBC;UID=sa"));

m_dbCust.ExecuteSQL(sql);

m_dbCust.Close();

###############################

错误处理:

1)  CDatabase未声明过,添加:#include  "afxdb.h"

2)  可能包含密码,如下处理,即把下面这句注释掉:

//#error Security Issue: The connection string may contain a password


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值