区分SQL服务器超时异常和C#中的SqlCommand超时异常
Distinguish between SQL Server Timeout Exceptions and SqlCommand Timeout Exceptions in C#
我现在已经阅读了一些关于 SQL 服务器超时异常的内容。我找到了这两个链接:
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
超时已过。在操作完成之前超时期限已过,或者服务器没有响应。 (微软 SQL 服务器,错误:-2)。
如何检测在 a) 操作完成或 b) 服务器没有响应之前是否超时?这就是问题。
是的,你可以。请注意,当您的 DBMS 未响应您的应用程序调用时会发生连接超时,而命令超时表示 DBMS 已响应。事实上,它发送一个 "fail" 以便您的驱动器抛出异常。
在命令超时中,它在连接超时时从服务器收到一个明确的错误代码,您的应用程序不知道发生了什么(也许有人拔了网线,也许服务器关闭了)但是 driver/framework 的内部会告诉你用号码 属性 .
发生了什么
下面的代码将查找异常编号 属性 并检查它是否是 命令超时 .
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 违规。只需做一个正则表达式匹配 "timeout" word.
参考文献:MSDN
How to catch SQLServer timeout exceptions
我现在已经阅读了一些关于 SQL 服务器超时异常的内容。我找到了这两个链接:
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 超时已过。在操作完成之前超时期限已过,或者服务器没有响应。 (微软 SQL 服务器,错误:-2)。
如何检测在 a) 操作完成或 b) 服务器没有响应之前是否超时?这就是问题。
是的,你可以。请注意,当您的 DBMS 未响应您的应用程序调用时会发生连接超时,而命令超时表示 DBMS 已响应。事实上,它发送一个 "fail" 以便您的驱动器抛出异常。 在命令超时中,它在连接超时时从服务器收到一个明确的错误代码,您的应用程序不知道发生了什么(也许有人拔了网线,也许服务器关闭了)但是 driver/framework 的内部会告诉你用号码 属性 .
发生了什么下面的代码将查找异常编号 属性 并检查它是否是 命令超时 .
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 违规。只需做一个正则表达式匹配 "timeout" word.
参考文献:MSDN
How to catch SQLServer timeout exceptions