我查看了试图解决与 SQL Server 连接暂时丢失的瞬态故障处理框架代码。这里有一个关键点:当存在与 SQL 相关的问题(如语法错误)和与 SQL 无关的问题(如无连接)时都会抛出。SqlException
当然,我只需要尝试从后一类问题中恢复——如果我的代码运行格式错误的查询,我需要快速失败,而不是重试任何事情。
SqlError.Number
该框架试图通过检查并将其与大量硬编码值进行比较来区分这些类。一旦 SQL Server 内部发生变化,基于此策略的大量知识和代码肯定需要维护。
我想也许我可以SqlException.LineNumber
改用?根据 MSDN,行号从 1 开始,行号 0 表示行号不适用,所以我猜这意味着问题与 SQL 无关。我尝试了一段时间 - 每当我遇到连接问题时LineNumber
总是为零。
是否使用SqlException.LineNumber
一种可靠的方法来识别异常是由于 SQL 查询问题还是由于连接问题?