我需要能够测试 System.Data.SqlClient.SqlException 是否是由于网络错误(连接到 MS SQL Server 的.NET 环境)。如果是,我可以告诉用户他的连接有问题,而如果不是,则很可能是我的代码中的错误,需要区别对待。显然,不出现误报是至关重要的(当它是一个错误时声明某个网络问题)。
在此处的相关问题中,建议从异常文本中提取信息。就我而言,这很丑陋且困难,因为文本是本地化的,并且可能因环境而异。
目前,我检查了某些函数调用的调用堆栈,这些函数调用(根据经验)与网络问题有关:
System.Data.SqlClient.TdsParserStateObject.WritePacket
System.Data.SqlClient.TdsParserStateObject.ReadNetworkPacket
System.Net.Sockets.SocketException
但是,如果在执行例如 SELECT 查询时出现超时,这些都不会弹出。因此,我将不得不重新检查异常消息中是否出现“超时”,这很难看。
有没有人有更好的主意?