程序中实现回滚,无法回滚的问题,请帮助分析

shusong1228 2013-12-06 03:24:10
现场: 使用批处理往数据库服务器上提交记录,但有时候出现重复提交记录的情况;程序大致的逻辑是这样的,每次提交时,如果出现错误或者超市,则执行回滚,等下次继续提交。

试了MSDN上C# SqlBulkCopy示例代码提供的2种事务方式都不行

以前采用数据库连接中BeginTransaction 事务方式,日志中看到:有Rollback() Exception! 回滚异常 代码见“事务1”,后来改成了利用SqlBulkCopy本身带的事务,NEW SqlBulkCopy 增加参数:SqlBulkCopyOptions.UseInternalTransaction 代码见“事务2”.

事务1:

SqlTransaction pTrans = null;

bool bResult = false;

try
{
pTrans = db.Sqlconnection.BeginTransaction();

using (SqlBulkCopy bcp = new SqlBulkCopy(db.Sqlconnection, SqlBulkCopyOptions.FireTriggers, pTrans))
{
try
{
bcp.DestinationTableName = table.TableName;
bcp.WriteToServer(table);

pTrans.Commit();
bResult = true;
}
catch (System.Exception e)
{

bool bRollback = false;
try
{
pTrans.Rollback(); --回滚
bRollback = true;
}
catch (System.Exception ex)
{
String strErrorMessage1 = "Rollback() Exception!";
bRollback = false;
}

if (bRollback)
{
AnalysisException(e, table);
}

bool result = db.Open(); //重连

if (result)
{
error = "reconnect successfully ";
}
else
{
error = "reconnect failed ";
}
return false;
}
}
}
catch (System.Exception e)
{
bool result = db.Open(); //重连
String error;
if (result)
{
error = "reconnect successfully ";
}
else
{
error = "reconnect failed ";
}
return false;
}

事务2:
bool bResult = false;
try
{
using (SqlBulkCopy bcp = new SqlBulkCopy(db.Sqlconnection, SqlBulkCopyOptions.FireTriggers | SqlBulkCopyOptions.UseInternalTransaction, null))
{
try
{
bcp.DestinationTableName = table.TableName;
bcp.WriteToServer(table);
bResult = true;
}
catch (System.Exception e)
{

bool result = db.Open(); //重连
String error;
if (result)
{
AnalysisException(e, table);
error = "reconnect successfully ";
}
else
{
error = "reconnect failed ";
}
return false;
}
}
}
catch (System.Exception e)
{
bool result = db.Open(); //重连
String error;
if (result)
{
error = "reconnect successfully ";
}
else
{
error = "reconnect failed ";
}
return false;
}
...全文
310 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
KeepSayingNo 2013-12-12
  • 打赏
  • 举报
回复
你把目标表清空,然后批量提交不要放到线程中做,只让批量提交一次,如果发生失败回滚,看看目标表是否有数据,如果回滚了不可能有数据提交到目标表
shusong1228 2013-12-12
  • 打赏
  • 举报
回复
引用 7 楼 dotnetstudio 的回复:
看你的目标表上面建了触发器没,如果没有建触发器,那就不需要这项了,直接用我的
目标表有触发器。 还是有回滚失败,重复提交记录的情况发生,不知道咋回事了。
KeepSayingNo 2013-12-12
  • 打赏
  • 举报
回复
看你的目标表上面建了触发器没,如果没有建触发器,那就不需要这项了,直接用我的
shusong1228 2013-12-12
  • 打赏
  • 举报
回复
引用 5 楼 dotnetstudio 的回复:
你这样试试看

 using (SqlBulkCopy bcp = new SqlBulkCopy(db.Sqlconnection, SqlBulkCopyOptions.UseInternalTransaction))
跟原来的有啥不同:using (SqlBulkCopy bcp = new SqlBulkCopy(db.Sqlconnection, SqlBulkCopyOptions.FireTriggers | SqlBulkCopyOptions.UseInternalTransaction, null))
t101lian 2013-12-09
  • 打赏
  • 举报
回复
在数据库中实现。。。
KeepSayingNo 2013-12-09
  • 打赏
  • 举报
回复
你这样试试看

 using (SqlBulkCopy bcp = new SqlBulkCopy(db.Sqlconnection, SqlBulkCopyOptions.UseInternalTransaction))
shoppo0505 2013-12-06
  • 打赏
  • 举报
回复
把rollback交给数据库自己做,别放在程序中。 现在这样的情况,吃力不讨好。
LongRui888 2013-12-06
  • 打赏
  • 举报
回复
尽量别用数据库连接的那个 begin transaction,那个会导致一些问题的。 尽量在语句中直接用begin transaction,失败了rollback tran
發糞塗牆 2013-12-06
  • 打赏
  • 举报
回复
你这个发去C#版比较好,我觉得t-sql里面和C#里面都要做回滚才安全
为什么要学习这门课程?·新一代流式数据湖技术组件深入讲解,帮助你快速构造数据湖知识体系。·为构建湖仓一体架构提供底层技术支撑。本课程将从原理、架构、底层存储细节、性能优化、管理等层面对Paimon流式数据湖组件进行详细讲解,原理+实战,帮助你快速上手使用数据湖技术。讲师介绍华为HCIP认证大数据高级工程师北京猎豹移动大数据技术专家中科院大数据研究院大数据技术专家51CTO企业IT学院优秀讲师电子工业出版社2022年度优秀作者出版书籍:《Flink入门与实战》、《大数据技术及架构图解实战派》。本课程提供配套课件、软件、试题、以及源码。课程内容介绍:1、什么是Apache Paimon2、Paimon的整体架构3、Paimon的核心特点4、Paimon支持的生态5、基于Flink SQL操作Paimon6、基于Flink DataStream API 操作Paimon7、Paimon中的内部表和外部表8、Paimon中的分区表和临时表9、Paimon中的Primary Key表(主键表)10、Paimon中的Append Only表(仅追加表)11、Changelog Producers原理及案例实战12、Merge Engines原理及案例实战13、Paimon中的Catalog详解14、Paimon中的Table详解15、Paimon之Hive Catalog的使用16、动态修改Paimon表属性17、查询Paimon系统表18、批量读取Paimon表19、流式读取Paimon表20、流式读取高级特性Consumer ID21、Paimon CDC数据摄取功能22、CDC之MySQL数据同步到Paimon23、CDC之Kafka数据同步到Paimon24、CDC高级特性之Schema模式演变25、CDC高级特性之计算列26、CDC高级特性之特殊的数据类型映射27、CDC高级特性之中文乱码28、Hive引擎集成Paimon29、在Hive中配置Paimon依赖30、在Hive中读写Paimon表31、在Hive中创建Paimon表32、Hive和Paimon数据类型映射关系33、Paimon底层文件基本概念34、Paimon底层文件布局35、Paimon底层文件操作详解36、Flink流式写入Paimon表过程分析37、读写性能优化详细分析38、Paimon中快照、分区、小文件的管理39、管理标签(自动管理+手工管理)40、管理Bucket(创建+删除+回滚)

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧