我有一个使用 ObjectContext
ExecuteStoreQuery
方法调用的存储过程,以便我可以获取存储过程返回的结果集。
我把它放在 try/catch 块中,但是即使存储过程返回以下错误,它也不会落入 catch 块。
如何捕获此类错误?
或者是否有另一种方法可以执行存储过程并获取结果集?
在 SQL 中执行时出错:
Msg 50000,级别 16,状态 2,过程计算费用,第 6440
行 计算费用时发生以下错误:
错误号: 515,行号: 5867
错误消息:无法将值 NULL 插入到"交易金额"列的表"交易"中;列不允许空值。插入失败。
电话代码:
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);
}
}
}
选择/返回结果集,就会在 C# 中正确引发异常。 存储过程在进程中间而不是在 try 块的末尾选择结果集。 一旦结果集的 select 语句移动到 try 块的末尾,它就会在 C# 中引发异常。