使用CDatabase进行事务处理

程序清单9-21  使用ExecuteSQL()方法示例

CDatabase dbSchool;

dbSchool.Open( "School", FALSE, FALSE, "ODBC;" );

dbSchool.ExecuteSQL( “UPDATE Student SET ClassID=32 WHERE ClassID=32” );

dbSchool.Close();

9.2.8  使用CDatabase进行事务处理

由本章的9.1.2小节,我们知道数据库的完整性包括实体完整性和参照完整性。当数据库满足完整性规则时,又称数据库处于一致状态。为保证完整性,在插入和删除多张表的数据时,需要将某些操作作为一个整体来执行而不允许被打断,因此就出现了事务的概念。

事务允许把一些SQL语句作为一个整体来执行,如果事务中的一个SQL语句出错,整个事务都会失败,并回到事务执行前的状态。

事务具有原子性,一致性,隔离性和持久性。原子性是指事务作为一个操作单元,或者全部完成,或者全部不做。一致性是指事务将数据库从一个一致状态转换到另一个一致状态。隔离性是指一个正在执行的事务在结束前不会让其它事务看到自己的运行结果。持久性是指当事务完成后,它对数据库的操作结果是永久的,不能再被擦除。

使用MFC ODBC类时,为开始一个事务,应该调用CDatabase::BeginTrans(),然后调用CDatabase::ExecuteSQL()执行这个事务,或者使用从该CDatabase产生的CRecordset对象执行这个事务。事务的结束有两种:当所有的操作成功时,用CDatabase::CommitTrans()提交事务;当发生错误时,用CDatabase::RollBack()放弃事务,并回到事务执行前的状态。

程序清单9-22是使用CDatabase进行事务处理的一个例程,它向School数据库的Teacher表和Class表同时添加记录。

程序清单9-22  事务处理例程

CDatabase *pDB=new CDatabase;
	pDB->Open( _T("datasource"), FALSE, FALSE, _T("ODBC;UID=sa;PWD=1;"));
	try{
		if(pDB->BeginTrans())
			TRACE("Transaction started/n");
		else
			TRACE("Error in starting transaction./n");
		pDB->ExecuteSQL(_T("INSERT INTO student VALUES (2 , 'ge', '女')"));
		//pDB->ExecuteSQL(_T("INSERT INTO Class VALUES (‘33’, ‘T0005’, ‘28’, ’86.1’)"));
		if(pDB->CommitTrans())
			TRACE("Transaction commited/n");
		else
			TRACE("Error in committing transaction./n");
	}
	catch (CDBException *e)
	{
		TRACE(e->m_strError);
		if(pDB->Rollback())
			TRACE ("Transaction rolled back/n");
		else
			TRACE("Error in rolling back transaction./n");
	}
	pDB->Close();
	delete pDB;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值