4

我查看了试图解决与 SQL Server 连接暂时丢失的瞬态故障处理框架代码。这里有一个关键点:当存在与 SQL 相关的问题(如语法错误)和与 SQL 无关的问题(如无连接)时都会抛出。SqlException

当然,我只需要尝试从后一类问题中恢复——如果我的代码运行格式错误的查询,我需要快速失败,而不是重试任何事情。

SqlError.Number该框架试图通过检查并将其与大量硬编码值进行比较来区分这些类。一旦 SQL Server 内部发生变化,基于此策略的大量知识和代码肯定需要维护。

我想也许我可以SqlException.LineNumber改用?根据 MSDN,行号从 1 开始,行号 0 表示行号不适用,所以我猜这意味着问题与 SQL 无关。我尝试了一段时间 - 每当我遇到连接问题时LineNumber总是为零。

是否使用SqlException.LineNumber一种可靠的方法来识别异常是由于 SQL 查询问题还是由于连接问题?

4

1 回答 1

0

我不相信您可以可靠地使用 LineNumber 属性来指示异常是与连接相关的错误。当存储过程、触发器或函数期间发生错误时,将设置 LineNumber。但是,在这些项目之外的查询中,甚至在可能导致 LineNumber 为 0 的 SqlException 的视图中,您仍然可能会遇到错误。最好的方法是使用您描述的使用 Number 属性与硬编码值集相比的技术。

于 2011-10-13T17:31:33.977 回答