本人用做.NET开发,访ORACLE 数据库,用到了MSDTS 和Oracle Services for Microsoft Transaction Server,出现如下错误:ORA-00161: 事务处理的分支长度 XX 非法 (允许的最大长度为 64)
环境:
数据库 :ORACLE 11 X64
服务器: Windows 7 X64 ,IIS 7,,Oracle Client 11 X64
客户端:Wndows7 X64被这个问题折腾得寝食难安,望高人指教,谢谢了!
环境:
数据库 :ORACLE 11 X64
服务器: Windows 7 X64 ,IIS 7,,Oracle Client 11 X64
客户端:Wndows7 X64被这个问题折腾得寝食难安,望高人指教,谢谢了!
解决方案 »
- bat并发执行sqlldr命令,并监控完成状态的问题
- 用form 10g打开form 6i开发的form文件报错!
- SQL代码优化求解
- Dear all,請幫我解決個問題.
- 为什么我得global_names 改称true 从新启动以后又变成false
- 关于时间的简单问题
- 急:PL/SQL的语句什么的应该在那儿执行呀?为什么在Sql*Plus里执行不了呢?连if。。。 then都不认识。在sql worksheet里也不行。
- 真遗憾,问题???
- 各位,在Oracle中怎么写触发器啊!写进去编辑没有错,可当写数据,它就说触发器无效啊,不能通过!
- 连接数据库
- 触发器oracle 执行了但表中无数据
- ORACLE在一个SQL怎么对一个字段升序同时对另一个字段降序排序呢?
ORA-00161 transaction branch length string is illegal (maximum allowed string)
--字符串超限!Cause: An external transaction branch ID with a length either too large or 0 was passed in.Action: Report the problem to your external transaction coordinator vendor.
/// <summary>
/// 增加周计划列表
/// </summary>
/// <param name="operateUser">操作员</param>
/// <param name="week_plan_list">周计划列表</param>
public void AddWeekPlanList(USER operateUser, List<WEEK_PLAN> week_plan_list)
{
WEEK_PLAN_DBAccess week_plan_dbAccess = new WEEK_PLAN_DBAccess();
SEQUENCE_PLANNING_DBAccess sequence_planning_dbAccess = new SEQUENCE_PLANNING_DBAccess();
PROCEDURE_PLAN_CD_DBAccess procedure_plan_cd_dbaccess = new PROCEDURE_PLAN_CD_DBAccess();
SPECIFY_DBAccess specify_dbAccess = new SPECIFY_DBAccess();
PLAN_CHARACTER_DBAccess plan_character_dbAccess = new PLAN_CHARACTER_DBAccess();
WORK_CHARACTER_DBAccess work_character_dbAccess = new WORK_CHARACTER_DBAccess();
List<WEEK_PLAN_HISTORY> week_plan_history_list = new List<WEEK_PLAN_HISTORY>(); WEEK_PLAN week_plan = null;
SPECIFY specify = null;
USER_DBAccess user_dbAccess = new USER_DBAccess();
if (operateUser == null || string.IsNullOrEmpty(operateUser.USER_ID))
{
throw new FaultException<InvalidValueException>(new InvalidValueException("操作员对象或其ID为空!"));
} if (week_plan_list == null || week_plan_list.Count == 0)
{
throw new FaultException<InvalidValueException>(new InvalidValueException("周计划列表不能为空!"));
}
try
{
TransactionOptions option = new TransactionOptions();
option.IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted;
using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, option))
{
if (user_dbAccess.Exists(operateUser.USER_ID) == false)
{
throw new FaultException<BusinessException>(new BusinessException(string.Format("操作员不是本部门员工!")));
}
for (int i = 0; i < week_plan_list.Count; i++)
{
week_plan = week_plan_list[i];
if (week_plan == null)
{
throw new FaultException<InvalidValueException>(new InvalidValueException("周计划列表不能存在为空的元素!"));
}
specify = specify_dbAccess.GetModel(week_plan.SPECIFY);
if (specify == null)
{
throw new FaultException<BusinessException>(new BusinessException(string.Format("周计划列表中第个元素对应的专业ID [{1}] 在数据库中不存在!", i, week_plan.SPECIFY)));
}
if (work_character_dbAccess.Exists(week_plan.WORK_CHARACTER) == false)
{
throw new FaultException<BusinessException>(new BusinessException(string.Format("周计划列表中第个元素对应的工作性质ID [{1}] 在数据库中不存在!", i, week_plan.WORK_CHARACTER)));
}
if (plan_character_dbAccess.Exists(week_plan.PLAN_CHARACTER) == false)
{
throw new FaultException<BusinessException>(new BusinessException(string.Format("周计划列表中第个元素对应的工作性质ID [{1}]在数据库中不存在!", i, week_plan.PLAN_CHARACTER)));
}
week_plan.WEEK_PLAN_ID = sequence_planning_dbAccess.GetNextVal();
week_plan.WEEK_PLAN_CD = procedure_plan_cd_dbaccess.GetWeekPlanCd(week_plan.SPECIFY);
week_plan.REGISTER_TIME = DateTime.Now;
week_plan.REGISTER_USER_ID = operateUser.USER_ID;
week_plan.UPDATE_TIME = week_plan.REGISTER_TIME;
week_plan.UPDATE_USER_ID = week_plan.REGISTER_USER_ID;
if ((week_plan.STATE == "4") || (this.GetPlanCharacter(week_plan.PLAN_CHARACTER).CHAR_CD == "A"))
{
WEEK_PLAN_HISTORY week_plan_history = new WEEK_PLAN_HISTORY();
week_plan_history.WEEK_PLAN_ID = week_plan.WEEK_PLAN_ID;
week_plan_history.REASON = week_plan.REASON;
week_plan_history_list.Add(week_plan_history);
}
week_plan_dbAccess.Add(week_plan);
}
if (week_plan_history_list.Count > 0)
{
this.AddWeekPlanHistoryList(operateUser, week_plan_history_list);
}
scope.Complete();
}
}
catch (DbException ex)
{
throw new FaultException<DataAccessException>(new DataAccessException(ex.Message + "访问数据库时出现异常!"));
}
catch (FaultException ex)
{
throw ex;
}
catch (Exception ex)
{
throw new FaultException<ServiceException>(new ServiceException(ex.Message + "服务内发生异常!"));
} }
/// <summary>
/// 删除周计划列表
/// </summary>
/// <param name="operateUser">操作员</param>
/// <param name="week_plan_list">周计划列表</param>
public void DeleteWeekPlanList(USER operateUser, List<WEEK_PLAN> week_plan_list)
{
WEEK_PLAN_DBAccess week_plan_dbAccess = new WEEK_PLAN_DBAccess();
WEEK_PLAN week_plan = null;
USER_DBAccess user_dbAccess = new USER_DBAccess();
if (operateUser == null || string.IsNullOrEmpty(operateUser.USER_ID))
{
throw new FaultException<InvalidValueException>(new InvalidValueException("操作员对象或其ID为空!"));
} if (week_plan_list == null || week_plan_list.Count == 0)
{
throw new FaultException<InvalidValueException>(new InvalidValueException("周计划列表不能为空!"));
}
try
{
TransactionOptions option = new TransactionOptions();
option.IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted;
using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, option))
{
if (user_dbAccess.Exists(operateUser.USER_ID) == false)
{
throw new FaultException<BusinessException>(new BusinessException(string.Format("操作员不是本部门员工!")));
}
for (int i = 0; i < week_plan_list.Count; i++)
{
week_plan = week_plan_list[i];
if (week_plan == null)
{
throw new FaultException<InvalidValueException>(new InvalidValueException("周计划列表不能存在为空的元素!"));
}
if (week_plan_dbAccess.Exists(week_plan.WEEK_PLAN_ID) == false)
{
throw new FaultException<BusinessException>(new BusinessException(string.Format("周计划列表中ID为 [{0}] 元素数据库不存在!", week_plan.WEEK_PLAN_ID)));
}
(new WEEK_PLAN_HISTORY_DBAccess()).DeleteByWeekPlanID(week_plan.WEEK_PLAN_ID);
week_plan_dbAccess.Delete(week_plan.WEEK_PLAN_ID);
}
scope.Complete();
}
}
catch (DbException ex)
{
throw new FaultException<DataAccessException>(new DataAccessException(ex.Message + "访问数据库时出现异常!"));
}
catch (FaultException ex)
{
throw ex;
}
catch (Exception)
{
throw new FaultException<ServiceException>(new ServiceException("服务内发生异常!"));
}
}
出错部分已用红色标出,即进入分布式事务后执行的第一个数据库操作时抛出异常