Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.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
Sql server 如何分配SqlException编号_Sql Server_Ado.net_Sqlexception - Fatal编程技术网

Sql server 如何分配SqlException编号

Sql server 如何分配SqlException编号,sql-server,ado.net,sqlexception,Sql Server,Ado.net,Sqlexception,SqlException具有属性Number 然后是: 这是: 而且似乎是这样或那样 问题: 如何决定哪一个 询问原因: 我需要捕获某些SqlExceptions,并根据Number属性决定如何处理它们,但我不知道当系统似乎同时使用来自这两个属性的消息时,应该查看哪个列表,我也不知道选择的标准是什么 例如: 编号53-来自服务器错误消息列表(两者都存在) 编号10054-来自系统错误消息列表(两者均存在) 编号-1-来自服务器错误消息列表(仅存在于服务器列表中) 编号121-来自系统错误消息列

SqlException具有属性Number

然后是:

这是:

而且似乎是这样或那样

问题:

如何决定哪一个

询问原因:

我需要捕获某些SqlExceptions,并根据Number属性决定如何处理它们,但我不知道当系统似乎同时使用来自这两个属性的消息时,应该查看哪个列表,我也不知道选择的标准是什么

例如:

  • 编号53-来自服务器错误消息列表(两者都存在)
  • 编号10054-来自系统错误消息列表(两者均存在)
  • 编号-1-来自服务器错误消息列表(仅存在于服务器列表中)
  • 编号121-来自系统错误消息列表(两者都存在)

我将查看该物业的文档

它是这么说的

这是中第一个SqlError的Number属性的包装 错误属性。有关SQL Server引擎错误的详细信息,请参阅 SQLServer在线图书


理论上,这是SQL错误号,例如服务器端。换句话说,第一个列表

但是,SqlClient报告的一些异常发生在客户端,而不是服务器端。一个典型的例子是连接到服务器失败之类的错误,因为您没有连接,所以不存在服务器端错误。例如,错误的服务器名称(在DNS中无法解析),在这种情况下,
InnerException
将指向值为的。在本例中,操作系统错误代码53将报告为SqlException错误号

在其他情况下,SqlClient报告的错误是套接字错误,比如突然断开连接。同样,这里没有所谓的“服务器端”错误,SqlException将使用一个众所周知的WSA错误号(如,Win32Error的子类)封装一个InnerException类型。在这种情况下,
SqlException.ErrorNumber
将是10054,但它是WSA范围中的10054,而不是SQL Server错误范围中的10054。我知道

那你该怎么办?确保检查
InnerException
,如果是
Win32Exception
,则
ErrorNumber
来自系统错误代码(操作系统错误)。否则,它应该是SQL Server错误号


哦,还有
-1
。。。我认为这是SqlClient本身报告的(例如,一些内部状态错误),但我不确定。

感谢您为我指出了正确的方向(这:)精彩的答案。值得注意的是,十六进制Win32代码在实际异常中转换为十进制。例如,我们得到的异常号为258,文本为等待操作超时。258转换为十六进制是0x102,从中可以清楚地看出,错误代码0x00000102与我们看到的错误文本相匹配。是否有一些文档可以保证这种行为?SqlException.Number的msdn文章似乎对此没有提及。