我有一个Azure工作者角色,在SQL数据库上执行简单的选择。它很少抛出下面的SqlException。
日志
基础提供程序在打开时失败。内部异常:超时过期。在操作完成或服务器没有响应之前经过的超时时间。异常类型: System.Data.SqlClient.SqlException
异常不会被捕获为SqlException。它被捕获在一般异常处理程序中。对此有何建议?
try{
}
catch(System.Data.SqlClient.SqlException sqlExcep)
{
}
catch(Exception genericExcep)
{
**//The exception is caught as a generic exception**
}发布于 2012-09-06 21:31:42
SQL数据库环境是处理网络负载平衡和资源管理的路由器和代理层。如果SQL数据库本身没有超时,那么中间的其他东西可能会超时(尽管这通常很少见)。
我通常也处理IOException错误,并将其中一些错误视为一种瞬态错误。您实际收到的异常类型是什么?
您尝试过实现瞬态故障处理应用程序块吗?http://msdn.microsoft.com/en-us/library/hh680934(v=pandp.50
赫夫
发布于 2012-09-06 21:38:20
看起来这是内在的异常,而不是你抓到的实际异常。外部异常的类型是什么?唯一可以做的事情是捕获捕获异常的任何类型,然后检查内部异常:
try
{
// Stuff
}
catch (Exception exc)
{
if (exc.InnerException is System.Data.SqlClient.SqlException)
{
var sqlException = exc.InnerException as System.Data.SqlClient.SqlException;
// Do stuff with the error.
}
}这个故事的寓意是你不能明确地捕捉到内在的例外:(
发布于 2020-07-10 14:46:19
尝试Microsoft.Data.SqlClient.SqlException而不是System.Data.SqlClient.SqlException
catch (Microsoft.Data.SqlClient.SqlException ex)
{
}https://stackoverflow.com/questions/12189721
复制相似问题