我想用一个例子告诉我的情况。
假设我们有存储过程,并且该过程包含这两行SQL代码
BEGIN TRY
-- Generate a divide-by-zero error.
SELECT 1/0;
END TRY
BEGIN CATCH
throw
END CATCH;
GO
当然,如果我们执行此sp,则返回除以零的异常:
遇到零错误
是否可以使用Dapper获取SQL抛出消息? 这里是小巧的请求电话
var data = sqlConnection.QueryFirstOrDefault<response>(QueryConstants.SpXXX,
parameters, null, Constants.DAPPER_TIMEOUT, CommandType.StoredProcedure);
我使用的是sql server 2017和Dapper 1.50.4.0
答案 0 :(得分:3)
我怀疑存储过程中的异常是在第一个结果网格后发生的。此问题似乎是User.reset_counters(:badges, :activities)
和User.left_joins(:badges, :activities)
.order(is_verified: :desc, is_admin: :desc)
.group("badges.id", "activities.id")
.order('COUNT(badges.id) DESC', 'COUNT(activities.id) DESC')
之间的细微差别。您可以使用以下方法解决此问题:
to_sql
以 以预期的方式投掷。我将调查正在发生的事情 - 我强烈怀疑它是Query<T>
提示(在QueryFirstOrDefault<T>
中使用的小巧玲珑)在观察到第一个网格后防止错误。
我建议在github上记录一个问题,所以我/我们可以跟踪它。
编辑:已确认 - var item = Query<T>(...).FirstOrDefault();
正在执行此操作;这里是一个原始的ADO.NET示例来说明,其中CommandBehavior.SingleResult
是在抛出异常之前执行QueryFirstOrDefault
的存储过程:
SingleResult
此处的修复可能只是为了删除所有foo
提示,例如here(不仅仅是那些,但这些是适用于这种情况的那些)