我现在已经阅读了有关SQL Server超时异常的信息。我找到了这两个链接:
how to detect sql server timeout from .NET application without using catch Exception
How to catch SQLServer timeout exceptions
所以-2是客户端超时,当我理解这一点时,可以将其用于服务器连接超时和命令超时。 -1和-3是服务器网络错误。
现在。在C#中以某种方式可以捕获异常并区分服务器连接超时和命令超时吗?
非常感谢!
编辑:例如:
https://msdn.microsoft.com/en-us/library/cc645611.aspx
-2 超时已过期。操作完成之前经过的超时时间或服务器没有响应。 (Microsoft SQL Server,错误:-2)。
如何检测在a)操作完成之前是否已经过了超时时间或b)服务器是否没有响应?这就是问题。
答案 0 :(得分:1)
是的,你可以。注意当您的DBMS没有响应您的应用程序调用时发生连接超时,而命令timout意味着DBMS被请求。事实上,它发送了一个"失败"为了你的驱动器抛出异常。 虽然在命令timout中它在连接超时时从服务器收到一个明确的错误代码,你的应用程序无法知道发生了什么(可能有人拉网线,也许服务器关机)但驱动程序/框架的内容会告诉你什么发生在使用数字属性。
下面的代码将查找异常编号属性,并检查它是否为命令超时。
try
{
//your .net C# code here
}
catch (SqlException ex)
{
if (ex.Number == -2 && (Regex.IsMatch(sqlEx.Message, "[tT]ime\-{0,1}out")) {
Console.WriteLine ("Command Timeout occurred")
};
}
此外,您可以解析异常文本以获取其他类型的命令错误,例如FK违规。只需进行正则表达式匹配"超时"字。
参考:MSDN