Jon*_*ger 3 sql-server linq-to-sql
我正在使用LINQ to SQL来调用存储过程.这个存储过程当前返回一个结果集,然后raiserror在检索结果集后触发一些语句(我正在编写存储过程的测试,如果你想知道为什么我这样做).
当LINQ to SQL调用proc并且它返回结果集时,它似乎忽略了我抛出的所有错误,因为它得到了结果集.有没有办法让它在raiserror从SQL 执行时始终抛出SqlException ?
有趣; 这是我之前在使用时遇到的一个问题IDataReader,这就是为什么我现在虔诚地使用所有表格(即使我只是期待一个) - 例如,如果我只期待一个表,例如:
while (reader.Read())
{ // read data from first table
}
// read to end of stream
while (reader.NextResult()) { }
Run Code Online (Sandbox Code Playgroud)
问题是错误会在你提出它时进入TDS; 所以如果你SELECT在TDS中的then in in table 之后提高它- 如果读者没有读到流的末尾,他们可能看不到它.
我会说实话 - 我的首选答案是:在数据之前提出所有错误.这可能意味着将main SELECT作为temp-table(#table)或table-variable(@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;
}
Run Code Online (Sandbox Code Playgroud)