可以使用SqlException.LineNumber来识别异常是否与连接有关?

时间:2011-08-24 07:30:26

标签: .net sql sql-server azure-sql-database reliability

我看了Transient Fault Handling Framework代码试图解决temporary loss of connectivity to SQL Server。那里有一个关键点:当存在与SQL相关的问题(如语法错误)和与SQL无关的事情(如无连接)时,SqlException都被抛出。

当然我只需要尝试从后面的类问题中恢复 - 如果我的代码运行格式错误,我需要快速失败,而不是重试任何东西。

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

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

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

1 个答案:

答案 0 :(得分:0)

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