2

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

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

如何捕获此类错误?

还是有另一种执行存储过程并取回结果集的方法?

在 SQL 中执行时出错:

消息 50000,级别 16,状态 2,过程 ComputeCharges,第 6440 行
计算费用时发生以下错误:
错误号:515,行号:5867
错误消息:无法将值 NULL 插入列“TransactionAmount”,表“Transactions”;列不允许空值。插入失败。

调用代码:

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);
       }
   }
}
4

1 回答 1

0

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

于 2015-04-24T18:26:27.480 回答