我正在使用 Microsoft.Practice.TransientFaultHandling 块进行重试逻辑。现在我将我的应用程序切换到 .Net 4.8 并为 SqlConnection 使用新构建的重试逻辑。我想知道我是否需要为我的 SqlCommand(我之前使用过 Polly)提供特殊的重试逻辑,或者这是否也是内置的。依赖内置函数时不可能记录重试,这使得测试非常困难。
微软在这里声明:
“有一个微妙之处。如果在执行查询时发生暂时性错误,您的 SqlConnection 对象不会重试连接操作。它当然不会重试您的查询。但是,SqlConnection 在发送查询之前会非常快速地检查连接执行。如果快速检查检测到连接问题,SqlConnection 重试连接操作。如果重试成功,则发送您的查询执行。
我通过在重试时间范围内断开并重新连接互联网来测试这一点,我的命令在一段时间后被执行。所以它似乎适用于这个简单的场景。但是依赖这个真的安全吗,还是我仍然需要为我的 SqlCommand 实现重试逻辑?
这是我的代码:
SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(ConnectionString);
builder.ConnectRetryCount = 5;
builder.ConnectRetryInterval = 3;
MyDataSet m_myDataSet = new MyDataSet();
using (SqlConnection sqlConnection = new SqlConnection(builder.ConnectionString))
{
try
{
sqlConnection.Open();
}
catch (SqlException sqlEx)
{
// do some logging
return false;
}
try
{
using (SqlCommand cmd = new SqlCommand(selectCmd, sqlConnection))
{
using (SqlDataAdapter da = new SqlDataAdapter(cmd))
{
da.Fill(m_myDataSet, tableName);
}
}
}
}