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

利用ODBC连接数据库

2013年01月25日 ⁄ 综合 ⁄ 共 1466字 ⁄ 字号 评论关闭

例子用到的数据库是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();

完整代码运行结果如下,添加了增、删、查、改四个功能


抱歉!评论已关闭.