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("行"); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |