例子用到的数据库是MySql
添加数据源
创建MFC 基佬于对话框的工程ODBC
在工程里添加头文件
#include "afxdb.h"
创建CDatabase类的对象
CDatabase db;
接下来就是连接数据库了,在OnInitDialog函数里添加
//判断数据库是否打开 if(!db.IsOpen()) { //连接数据库,两种open方式 BOOL flag=db.Open("test",FALSE,FALSE,"ODBC;UID=root;PWD=2009101185"); // BOOL flag=db.Open("test"); if(!flag) { MessageBox("打开数据库失败!"); return FALSE; } else { MessageBox("打开数据库成功!"); } }
接着在对话框中添加一个List Control控件,用来显示数据库表中的内容,为控件关联一个变量m_list
//设置ListControl控件的状态 m_list.SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT); m_list.InsertColumn(0,"",LVCFMT_CENTER,0); m_list.InsertColumn(1,"编号",LVCFMT_CENTER,195); m_list.InsertColumn(2,"姓名",LVCFMT_CENTER,195); m_list.DeleteColumn(0);
我用来测试的数据库表中只有两个字段,因为MFC不允许修改List Control控件第一列的状态,所以可以通过上面的方式去让界面上的第一列居中(实际是我创建的第二列)
接下来,实例化CRecordset类,CRecordset类代表一个记录集,是MFC的ODBC类中最重要、功能最强大的类。
CRecordset db_recordset(&db);
接下来就来执行一条SELECT语句,并把结果显示在List Control中
CString str="select * from dept"; //执行"select * from dept"语句 db_recordset.Open(CRecordset::forwardOnly,str);
在MSDN里对CRecordset::Open函数的第二个参数有这样一句描述
- An SQL SELECT statement (optionally with an SQL WHERE orORDER BY clause).
所以在CRecordset::Open函数只能执行SELECT语句,其它的语句可用CDatabase::ExecuteSQL函数
接下来就是获取查询到的结果了
//获取查询结果,并将结果显示在ListControl控件里 for(int i=0;!db_recordset.IsEOF()&&!db_recordset.IsBOF();i++) { db_recordset.GetFieldValue((short)0,str); m_list.InsertItem(i,str); db_recordset.GetFieldValue((short)1,str); m_list.SetItemText(i,1,str); db_recordset.MoveNext(); } db_recordset.Close();不要忘记调用Close函数关闭CRecordset对象
最后就是关闭CDatabase对象了
db.Close();完整代码运行结果如下,添加了增、删、查、改四个功能