如何使用执行存储过程的ExecuteStoreQuery检查C#中的错误?

时间:2015-04-23 16:47:49

标签: c# entity-framework executestorequery

我有一个使用ObjectContext ExecuteStoreQuery方法调用的存储过程,以便我可以获取存储过程返回的结果集。

我在try / catch块中有它,但是即使存储过程返回以下错误,它也不会落入catch块。

如何捕获此类错误?

或者是否有另一种执行存储过程并获取结果集的方法?

在SQL中执行时出错:

  

Msg 50000,Level 16,State 2,Procedure ComputeCharges,Line 6440
  计算费用时发生以下错误:
  错误号码:515,行号:5867
  错误消息:无法将值NULL插入列' TransactionAmount',table' Transactions&#39 ;;列不允许空值。 INSERT失败。

致电代码:

using (DbContext dbContext = GetDbContext())
{
   using (ObjectContext objContext = ((System.Data.Entity.Infrastructure.IObjectContextAdapter)dbContext).ObjectContext)
   {
       try
       {
           IEnumerable<ResultSet> results = objContext.ExecuteStoreQuery<ResultSet>(sqlString).ToList();
        }
       catch (Exception e)
       {
          EventLogger.LogException(e, title: "An error occurred while computing charges.", silent: false);
       }
   }
}

1 个答案:

答案 0 :(得分:-1)

在这种情况下,只要尚未选择/返回结果集,就会在C#中正确抛出异常。存储过程是在进程的中间选择结果集,而不是在try块的末尾。一旦结果集的select语句移动到try块的末尾,它就会在C#中抛出异常。