6

SqlException具有属性Number

然后是这个:http: //msdn.microsoft.com/en-us/library/cc645603.aspx

这: http: //msdn.microsoft.com/en-us/library/windows/desktop/ms681382 (v=vs.85).aspx

它似乎是其中之一

问题:

它是如何决定的?

问的原因:

我需要捕获某些SqlExceptions并根据并根据Number但我不知道当系统似乎正在使用来自两者的消息时我应该查看哪个列表,而且我不知道什么标准用于选择。

例如:

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

2 回答 2

12

理论认为它是 SQL 错误号,例如。服务器端ERROR_NUMBER()。换句话说,第一个列表。

但是,SqlClient 报告了许多发生在客户端而不是服务器端的异常。一个典型的例子是连接服务器失败之类的错误,因为你没有连接,所以没有服务器端错误可言。例如,错误的服务器名称(无法在 DNS 中解析),在这种情况下,将InnerException指向Win32Exception值为NativeErrorCode. ERROR_BAD_NETPATH在本例中为53,OS系统错误码,会报SqlException错误号。

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

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

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

于 2013-09-19T12:40:34.470 回答
4

我会查看SqlException.Number属性的文档。

这就是它所说的

这是 Errors 属性中第一个 SqlError 的 Number 属性的包装器。有关 SQL Server 引擎错误的详细信息,请参阅 SQL Server 联机丛书。

于 2013-09-19T12:19:28.043 回答