加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

Qt与SqlServer 2000数据库事务处理

发布时间:2020-12-12 16:07:00 所属栏目:MsSql教程 来源:网络整理
导读:在网上看见大家提到的方法是这样的: if(QSqlDatabase::database().driver()-hasFeature(QSqlDriver::Transactions)) { //先判断该数据库是否支持事务操作 if(QSqlDatabase::database().transaction()) //启动事务操作 { //下面执行各种数据库操作 QSqlQuery

在网上看见大家提到的方法是这样的:

if(QSqlDatabase::database().driver()->hasFeature(QSqlDriver::Transactions))
    { //先判断该数据库是否支持事务操作
        if(QSqlDatabase::database().transaction()) //启动事务操作
        {
            //下面执行各种数据库操作
            QSqlQuery query;
            query.exec("insert into student values (14,'hello')");
            query.exec("delete from student where id = 1");
            if(!QSqlDatabase::database().commit())
            {
                qDebug() << QSqlDatabase::database().lastError(); //提交
                if(!QSqlDatabase::database().rollback())
                    qDebug() << QSqlDatabase::database().lastError(); //回滚
             }
        }
    }



我开始也觉得挺方便的,后来测试了一下(Qt4.8.4+Vs2008 + sqlServer2000)

执行两条exec语句,有一条为真,一条为假,但是commit都是真,一下达不到我的要求了,无赖之下只有采取迂回政策了,直接在exec方法中执行BEGIN TRAN,COMMIT TRAN,ROLLBACK TRAN这些语句。而每执行的一条其它SQL语句,则记录是否成功,如果中间有一条失败,则调用ROLLBACK TRAN,否则最后执行COMMIT TRAN。

if (query.exec("BEGIN TRANSACTION LJT"))
{
	bool execFlag1 = 
		if (execFlag1&&)
		{
			if (!query.exec("COMMIT TRANSACTION LJT"))
			{
				qDebug()<<QObject::tr("COMMIT TRANSACTION出错,在文件")<<__FILE__<<QObject::tr("第")<<__LINE__<<QObject::tr("行");
			}
		}
		else
		{
			if (!query.exec("ROLLBACK TRANSACTION LJT"))
			{
				qDebug()<<QObject::tr("ROLLBACK TRANSACTION出错,在文件")<<__FILE__<<QObject::tr("第")<<__LINE__<<QObject::tr("行");
			}
		}
}
else
{
	qDebug()<<QObject::tr("BEGIN TRANSACTION出错,在文件")<<__FILE__<<QObject::tr("第")<<__LINE__<<QObject::tr("行");
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读