sql-server - LINQ 到 SQL : errors from stored procedure are ignored after result set is returned

标签 sql-server linq-to-sql

我正在使用 LINQ to SQL 调用存储过程。此存储过程当前返回一个结果集,然后在检索结果集后触发一些 raiserror 语句(我正在为存储过程编写测试,以防您想知道我为什么要这样做) .

当 LINQ to SQL 调用 proc 并返回结果集时,它似乎忽略了我抛出的所有错误,因为它得到了结果集。当我从 SQL 执行 raiserror 时,有没有办法让它总是抛出 SqlException?

最佳答案

有趣;这是我以前在使用 IDataReader 时遇到的问题。 ,这就是为什么我现在虔诚地消费所有的 table (即使我只期待一张) - 例如,如果我只期待一张 table ,类似于:

    while (reader.Read())
    { // read data from first table

    }
    // read to end of stream
    while (reader.NextResult()) { }

问题是错误在您提出它时进入 TDS;所以如果你在 SELECT 之后提出它然后在 TDS 中的下表中 - 如果读者没有读到流的末尾,他们可能看不到它。

说实话 - 我的首选答案是:在数据之前引发所有错误。这可能意味着做主要的SELECT放入临时表 ( #table ) 或表变量 ( @table )。除此之外 - 如果捕获此错误是关键(并且如果内置的 LINQ-to-SQL 代码没有帮助),那么可能会退回到 ExecuteReader和上面类似的东西。

怀疑(但我没有检查)你也可以使用 DataContext.Translate<T>做一些 ORM 繁重的工作;例如:

// cmd is our DbCommand, and ctx is our DataContext
using(var reader = cmd.ExecuteReader()) {
   var result = ctx.Translate<MyResultType>(reader).ToList();
   while(reader.NextResult()) {}
   return result;
}

关于sql-server - LINQ 到 SQL : errors from stored procedure are ignored after result set is returned,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1460342/

相关文章:

sql-server - 使隐藏表列在SSRS 2008 R2中不占空间

visual-studio - 带有 GDR2 的 Visual Studio 2008 SP1 - 无法创建 DBMDL

c# - LINQ to SQL (CE) 速度与 SqlCe

c# - MVC 是否会在 return 语句之后以某种方式枚举结果?

sql - 如何查找花费大量时间的 SQL Server 查询?

sql-server - sql server FOR XML 有字符限制吗?

sql - 将数字区间分成组

sql - 使用 SQL Like 对一系列字符进行模式匹配

c# - 具有条件 AND、OR 和 NOT 过滤器的 Linq PredicateBuilder

c# - LINQ 中的动态查询