我有一个使用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);
}
}
}
答案 0 :(得分:-1)
在这种情况下,只要尚未选择/返回结果集,就会在C#中正确抛出异常。存储过程是在进程的中间选择结果集,而不是在try块的末尾。一旦结果集的select语句移动到try块的末尾,它就会在C#中抛出异常。