Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 是否可以使用SqlException.LineNumber来标识异常是否与连接相关?_.net_Sql_Sql Server_Azure Sql Database_Reliability - Fatal编程技术网

.net 是否可以使用SqlException.LineNumber来标识异常是否与连接相关?

.net 是否可以使用SqlException.LineNumber来标识异常是否与连接相关?,.net,sql,sql-server,azure-sql-database,reliability,.net,Sql,Sql Server,Azure Sql Database,Reliability,我看了看试图解决的代码。这里有一个关键点:SqlException在出现与SQL相关的问题(如语法错误)和与SQL无关的问题(如无连接)时都会抛出 当然,我只需要尝试从后一类问题中恢复—如果我的代码运行的查询格式不正确,我需要快速失败,而不是重试任何操作 该框架试图通过检查SqlError.Number并将其与大量硬编码值进行比较来区分这些类。一旦SQL Server内部发生更改,基于此策略的大量知识和代码肯定需要维护 我想也许我可以用它来代替?根据MSDN,行号从1开始,行号0表示行号不适用,

我看了看试图解决的代码。这里有一个关键点:
SqlException
在出现与SQL相关的问题(如语法错误)和与SQL无关的问题(如无连接)时都会抛出

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

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

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


使用
SqlException.LineNumber
是确定异常是由SQL查询问题引起还是由连接问题引起的一种可靠的方法吗?

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

从帮助中,它似乎只在查询和存储过程中填充。我不知道优化是否会导致查询的行号为0。如果你能断言这一点,我想这是可靠的。那些硬编码的消息是在sys.messages系统目录视图中定义的,这些消息很可能不会随着微软对兼容性的重视而改变seriously@Thiago丹塔斯:是的,但是,可能会添加一些新代码,我的代码必须识别它们。这与如果行号行为发生更改,您必须更改代码相同。如果它已经开始工作了,我就不会费心去改变它了。这是一个不起作用的例子<代码>行号0;选择1/0