TransactionScope分布式事务出错:msdtc已经取消了分布式事务。

MXCZ945 2013-11-22 10:47:56

using (TransactionScope scope = new TransactionScope())
{
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(Configuration.ConnectionString))
{
bulkCopy.DestinationTableName = "GeographyPerformanceData";
bulkCopy.BatchSize = geoPerformTable.Rows.Count;
bulkCopy.WriteToServer(geoPerformTable);

bulkCopy.Close();
}
//批量更新(使用了SqlTranaction事务)
if (lstUpdateSql.Count > 0)
{
int updatedCount = KPIPerformanceDataBLL.Instance.BatchUpdate(lstUpdateSql);
if (updatedCount == 0)
{
ri.Success = false;
ri.Message = "导入失败!请重试。";
return ri;
}
}

//同步地区目标数据到经理信息,在sql语句中使用了tran事务
for (int rowIndex = 0; rowIndex < performData.Rows.Count; rowIndex++)
{
geographyCode = performData.Rows[rowIndex][4].ToString().Trim();
try
{
GeographyPerformanceDataBLL.Instance.SyncGeoTargetToManager(PerformanceEvalInfo.Id, geographyCode);

}
catch (Exception ex)
{
ri.Success = false;
ri.Message = "同步地区目标数据到经理信息出错!\n内部错误说明:" + ex.Message;
return ri;
}
}

//commit transaction
scope.Complete();
}


asp.net程序。
以上代码有在scope内部有三个任务,批量insert,批量update,还有最后一个是带sql tran的
存储过程。
每个部分都可以单独执行,(就是说,代码或sql无错)。
存储过程如下:

ALTER PROCEDURE [dbo].[INSERTKPIDATAFROMGEODATA]
(
@EMPLOYEEID UNIQUEIDENTIFIER, --经理ID
@GEOGRAPHYID UNIQUEIDENTIFIER,--负责地区ID
@EVALUATIONID UNIQUEIDENTIFIER--考核ID

--'40911A5E-2958-4790-BA2F-A701104B501E','0FAC819B-68ED-4A4E-AD74-31F44B6BAC80','C55B73DE-50D9-4391-8784-E60753C56BBF'
)
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRY
BEGIN TRAN
//一些操作,绝无语法及数据错误。
COMMIT TRAN
RETURN 1
END TRY
BEGIN CATCH
ROLLBACK TRAN
RETURN 0
END CATCH
END

但是每次执行都是在执行了存储过程之后报错

“Microsoft 分布式事务处理协调器(MS DTC)已取消此分布式事务”

前提是客户端和服务端均已经配置了MSDTC,对此错误无从下手,望有经验的高手帮忙解决!!!谢谢!!
...全文
176 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
MXCZ945 2013-11-22
  • 打赏
  • 举报
回复
自己顶起来,郁闷!
MXCZ945 2013-11-22
  • 打赏
  • 举报
回复
顶起让大家看到!!!
MXCZ945 2013-11-22
  • 打赏
  • 举报
回复
有没有人啊,很急啊。求助!
Phoozyan 2013-11-22
  • 打赏
  • 举报
回复
很简单,删除try catch,放弃sqltran,说实话,sqltran在非纯T-SQL情况下用处不大。 因为sqlserver不能智能匹配begin和commit,特别是存在xact_abort为ON时的复杂情况。 给分吧,相信我,我这是正确答案,并且这么久无人帮助。

110,545

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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