MFC连接SQL数据库操作

要操作SQL数据库要经过以下几个步骤:

0.建立数据库

1.配置数据源

2.数据库的连接

3.数据库的操作

4.类资料

【1】配置数据源

配置数据源一般有两种方法一种是通过注册表,一种是通过SQLConfigDataSource函数,具体操作如下:

第一种:SQLConfigDataSource函数创建数据源,包含 "ODBCINST.h"头文件

SQLConfigDataSource(NULL,ODBC_ADD_DSN,"SQL Server","DSN=SQLODBC\0");//创建数据源

第二种:注册表创建数据源,包含"afxdb.h"

CRegKey m_hKey;//注册一个操作注册表的类
m_hKey.Create(HKEY_CURRENT_USER,"Software\\ODBC\\ODBC.INI\\ODBC Data Sources");
//创建ODBC Data Sources项,此项列出的是数据源
m_hKey.SetValue("SQL Server","SQLODBC");
//设置数据源名称和数据源驱动
m_hKey.Create(HKEY_CURRENT_USER,"Software\\ODBC\\ODBC.INI\\SQLODBC");
\\创建 数据源项
\\设置数据源的详细参数
m_hKey.Open(HKEY_CURRENT_USER,"Software\\ODBC\\ODBC.INI\\SQLODBC");
m_hKey.SetValue("SQLTest","Database");
m_hKey.SetValue("C:\\Windows\\system32\\SQLSRV32.dll","Driver");
m_hKey.SetValue("Administrator","LastUser") ; 
m_hKey.SetValue("(local)","Server") ; 
m_hKey.SetValue("Yes","Trusted_Connection"); 

【2】数据库的连接

         到了MFC的阶段了,首先建立一个MFC工程,放置两个按钮,对两个按钮实现消息响应,一个名称为“连接数据库”,一个为“查询数据库信息”。

因为要使用到CDatabase类所以需要在stdafx.h中包含afxdb.h头文件。

“连接数据库”按钮的消息响应函数代码如下

连接数据源

////////////////////////////////////////连接数据库按钮代码//////////////////////////////////////////////////////////////////
CDatabase m_db;//嵌入一个CDatabase对象
CRecordset *m_dbrs;  
m_dbrs = CRecordset(&m_db);//创建一个记录集

m_db.Open("ODBC;DSN=SQLODBC;UID=SQLTest;PWD=12345678");	// 连接数据源
m_dbrs = new CRecordset(&m_db);	                        // 创建存放数据的记录集

【3】数据库的操作

执行SQL数据库语句:通过CDatabase执行SQL语句,不返回记录集

CString strSQL = "create table tabname(i int) ";	// 组织SQL语句
m_db.ExecuteSQL(strSQL);//执行SQL语句

查询数据库

try
	{
		CString strquery = "";
		CString strSQL = "SELECT * FROM test ";	// 组织SQL语句
		m_dbrs->Open(CRecordset::forwardOnly, strSQL, CRecordset::readOnly); // 用SQL查询数据库
		CString psd;
		short nFields = m_dbrs->GetODBCFieldCount();//返回字段数
		//通过IsEOF函数判断记录集是否为空(记录集如果定位在最后的话,会返回0,详情请看CRecordset的MSDN说明)
		while(!m_dbrs->IsEOF())
		{
			for(short index = 0; index < nFields; index++)
			{

				m_dbrs->GetFieldValue(strquery,psd);//将字段中的值挨个取出
				MessageBox(psd);
			}
			m_dbrs->MoveNext();
		}
		m_dbrs->Close();// 关闭记录集
		//m_db.Close();//关闭数据源可放在程序关闭函数里实现,这样避免了一直重复的去打开数据源
	}
	catch (CMemoryException* e)
	{

	}
	catch (CFileException* e)
	{
	}
	catch (CException* e)
	{
	}

【资料】

CDatabase类操作数据源

函数

说明

CDatabase

构造一个对象

Close

关闭数据源连接

Open

通过一个ODBC驱动程序创建到数据源的连接

OpenEx

通过一个ODBC驱动程序创建到数据源的连接

BeginTrans

开始事务

BindParameters

允许在调用CDatabase::ExecuteSQL前绑定参数

Cancel

取消异步操作或第二条线程中的过程

CommitTrans

执行事务

ExecuteSQL

执行SQL语句,不返回记录

Rollback

回滚事务,数据源返回先前的状态

该类的属性函数如下表:

属性

说明

CanTransact

如果数据源支持事务,返回非零

CanUpdate

如果CDatabase可以更新,返回非零

GetBookmarkPersistence

获得书签对记录集对象的持久性

GetConnect

返回ODBC连接串

GetCursorCommitBehavior

获得提交事务对记录集对象的影响

GetCursorRollbackBehavior

获得回滚事务对记录集对象的影响

GetDatabaseName

返回当前使用的数据库名

IsOpen

如果当前CDatabase对象连接到数据源,返回非零

SetLoginTimeout

设置数据源连接的超时数(秒为单位)

SetQueryTimeout

设置查询操作的超时数(秒为单位)

应用程序可使用多个CDatabase类型的对象。构造一个对象并调用Open()成员函数打开一个连接。接着构造CRecordset类型的对象以操作连接的数据源,构造时向记录集对象传递CDatabase类型的指针。完成使用后,用Close()成员函数销毁CDatabase类型的对象。

一般情况下并不需要直接使用CDatabase类型的对象,因为CRecordset类型的对象可以实现大多数的功能、但是在进行事务处理时,CDatabase就起到关键作用。事务(Transaction)指的是将一系列对数据源的更新放在一起,同时提交或一个都不提交,为的是确保多用户对数据源同时操作时的数据正确性。

CRecordset类操作记录集

一个CRecordset类型的对象代表从数据源选择的一组记录的集合——记录集,通过该类的方法实现对数据库中记录的各种操作。

该类常用的数据成员如下表:

成员

说明

m_hstmt

包含记录集的ODBC陈述句柄,类型为HSTMT

m_nFields

包含记录集中字段数据成员的数量,类型为UNIT

m_nParams

包含记录集中参数数据成员的数量,类型为UNIT

m_pDatabase

包含一个CDatabase对象指针,通过它访问数据源

m_strFilter

包含CString对象,定义SQL中WHERE子句

m_strSort

包含CString对象,定义SQL中ORDER BY子句

该类的构造方法如下表:

构造方法

说明

Close

关闭记录集和与之相关的HSTMT

CRecordset

构造一个CRecordset对象

Open

通过获得表或执行记录集所代表的查询来打开记录集

CRecordset类记录集属性如下表:

属性

说明

CanAppend

如果新记录可以通过Addnew添加到记录集,返回非零

CanBookmark

如果记录集支持书签,返回非零

CanRestart

如果Requery可以被调用来再次运行记录集查询,返回非零

CanScroll

如果可以在记录中回滚,返回非零

CanTransact

如果数据源支持事务,返回非零

CanUpdate

如果记录集可以被更新,返回非零

GetODBCFieldCount

返回记录集中字段的数量

GetRecordCount

返回记录集中记录的数量

GetSQL

获得SQL字符串

GetStatus

获得记录集的状态

GetTableName

获得记录集所属的表名

IsBOF

如果记录集定位在第一条记录之前,返回非零

IsDeleted

如果记录集定位在一条删除的记录,返回非零

IsEOF

如果记录集定位在最后一条记录之后,返回非零

IsOpen

如果调用过Open函数,返回非零

CRecordset类更行操作如下表:

更新操作

说明

AddNew

准备增加一条新纪录,调用Update之后完成添加

CancelUpdate

取消任何未完成的更新

Delete

从记录集中删除当前记录

Edit

准备对当前记录进行修改,调用Update后完成修改

Update

通过将新记录或编辑的数据存入数据源来完成AddNew或Edit操作

记录集有两种形式:snapshot(表示数据的静态视图)和dynaset(表示记录集与其他用户对数据库的更新保持同步)。

CFieldExchange类处理数据交换

CFieldExchange类支持数据库类所使用的记录集字段交换(RFX)程式。如果使用自定义的数据类型写数据交换程式,会使用这个类。否则不会直接使用此类。RFX在记录集对象的字段数据成员与数据源中当前记录的相应字段之间交换数据。

CRecordView类显示记录

CRecordView对象用于在控件中显示数据库记录的视图。这种视图是一种直接连到一个CRecordView对象的格式视图,它从一个对话框模板创建资源,并将CRecordView对象的字段显示在对话框模版的控件里。对象利用DDX和RFX机制,使窗体上的空间和记录集的字段值之间数据移动自动化,也就是说,用户不需要编写一行代码就可以完成简单的数据库记录查看程序。

CDBException类处理异常

由CException类派生,以3个继承的成员变量反映对数据库操作时的异常:

m_nRetCode:以ODBC返回代码(SQL_RETURN)的形式表明造成异常的原因

m_strError:字符串,描述造成抛出异常的错误原因

m_strStateNativeOrigin:字符串,用以描述以ODBC错误代码表示的异常错误

 

使用MFC ODBC编程建立应用程序

MFC ODBC编程模型概述

使用MFC ODBC访问数据库比直接使用ODBC API简单得多,编程步骤如下:

使用CDatabase打开数据源的连接,如果利用AppWizard生成一个ODBC数据库应用程序,则会自动完成操作。

使用ClassWizard向导加入由CRecordset类派生的用户记录集类,完成对数据库的绑定。

创建记录集类对象,如果利用AppWizard生成一个ODBC数据库应用程序,则会自动在文档类中创建。

使用记录及对象对数据库进行遍历、增加、删除、修改等操作。

使用CDatabase类的ExecuteSQL函数直接执行SQL命令。

使用CDatabase类的BeginTrans、CommitTrans和Rollback函数进行事务处理

使用CDatabase类的Close函数关闭数据源连接。

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/nonecode/article/details/7939693
个人分类: MFC开发
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭