如何分配SqlException Number

Ari*_*rie 5 sql-server ado.net sqlexception

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号 - 来自系统错误消息列表(两者都存在)......

Rem*_*anu 9

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

但是,SqlClient报告的许多异常发生在客户端,而不是服务器端.一个典型的例子是错误,如连接到服务器失败,因为你没有连接,没有服务器端错误可言.例如,一个坏的服务器名(在DNS不能解决),在这种情况下,InnerException会朝着一个指向Win32ExceptionNativeErrorCode价值ERROR_BAD_NETPATH.在这种情况下,53,OS系统错误代码,将报告为SqlException错误号.

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

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

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