答案:C#中可通过循环重试或Polly库实现数据库连接重试。手动方式使用SqlConnection配合循环、延迟和异常捕获,适合简单场景;Polly提供可复用策略,支持异步与指数退避,结合超时熔断更适用于生产环境。

当数据库连接不稳定时,实现自动重试机制能有效提升程序的健壮性。在C#中,可以通过循环尝试连接,并配合延迟和异常捕获来实现连接失败重试。
下面是一个简单的示例,展示如何在连接 SQL Server 数据库时加入重试机制:
using System;
using System.Data.SqlClient;
using System.Threading;
class DatabaseHelper
{
private static readonly int MaxRetries = 3;
private static readonly int DelayMs = 2000; // 2秒延迟
public static SqlConnection GetConnection(string connectionString)
{
for (int attempt = 1; attempt <= MaxRetries; attempt++)
{
try
{
var connection = new SqlConnection(connectionString);
connection.Open();
Console.WriteLine("数据库连接成功。");
return connection;
}
catch (SqlException ex)
{
Console.WriteLine($"第 {attempt} 次连接失败:{ex.Message}");
if (attempt == MaxRetries)
{
Console.WriteLine("已达到最大重试次数,无法连接数据库。");
throw; // 重新抛出最后一次异常
}
Thread.Sleep(DelayMs); // 等待后再重试
}
}
return null; // 不会执行到这里
}
}
使用上面的方法连接数据库:
class Program
{
static void Main()
{
string connStr = "Server=localhost;Database=TestDB;User Id=sa;Password=yourpassword;";
try
{
using (var conn = DatabaseHelper.GetConnection(connStr))
{
// 执行数据库操作
using (var cmd = new SqlCommand("SELECT COUNT(*) FROM Users", conn))
{
var count = cmd.ExecuteScalar();
Console.WriteLine($"用户总数:{count}");
}
}
}
catch (Exception ex)
{
Console.WriteLine("最终连接失败:" + ex.Message);
}
}
}
对于更优雅的重试策略,推荐使用 Polly 库,它提供了丰富的弹性策略,如指数退避、超时等。
先通过 NuGet 安装 Polly:
Install-Package Polly代码示例:
using Polly;
using Polly.Retry;
using System.Data.SqlClient;
public class ResilientDatabaseHelper
{
private static readonly AsyncRetryPolicy<SqlConnection> RetryPolicy =
Policy<SqlConnection>
.Handle<SqlException>()
.WaitAndRetryAsync(
retryCount: 3,
sleepDurationProvider: attempt => TimeSpan.FromSeconds(Math.Pow(2, attempt)), // 指数退避
onRetry: (outcome, timespan, attempt, context) =>
{
Console.WriteLine($"第 {attempt} 次重试,等待 {timespan.TotalSeconds} 秒。");
});
public static async Task<SqlConnection> GetConnectionAsync(string connectionString)
{
return await RetryPolicy.ExecuteAsync(async () =>
{
var connection = new SqlConnection(connectionString);
await connection.OpenAsync();
Console.WriteLine("数据库连接成功。");
return connection;
});
}
}
Polly 的优势在于策略可复用、支持异步、且易于扩展,比如结合熔断、超时等策略。
基本上就这些。手动重试适合简单场景,Polly 更适合生产环境。以上就是如何用C#实现数据库的连接失败重试?代码示例是什么?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号