微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Qt与SqlServer 2000数据库事务处理

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

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("行");
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐