如何用C#实现数据库的连接失败重试?代码示例是什么?

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

如何用c#实现数据库的连接失败重试?代码示例是什么?

当数据库连接不稳定时,实现自动重试机制能有效提升程序的健壮性。在C#中,可以通过循环尝试连接,并配合延迟和异常捕获来实现连接失败重试。

使用 SqlConnection 和重试逻辑

下面是一个简单的示例,展示如何在连接 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 库(推荐方式)

对于更优雅的重试策略,推荐使用 Polly 库,它提供了丰富的弹性策略,如指数退避、超时等。

先通过 NuGet 安装 Polly:

Install-Package Polly

代码示例:

using Polly;using Polly.Retry;using System.Data.SqlClient;public class ResilientDatabaseHelper{    private static readonly AsyncRetryPolicy RetryPolicy =        Policy            .Handle()            .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 GetConnectionAsync(string connectionString)    {        return await RetryPolicy.ExecuteAsync(async () =>        {            var connection = new SqlConnection(connectionString);            await connection.OpenAsync();            Console.WriteLine("数据库连接成功。");            return connection;        });    }}

Polly 的优势在于策略可复用、支持异步、且易于扩展,比如结合熔断、超时等策略。

基本上就这些。手动重试适合简单场景,Polly 更适合生产环境。

以上就是如何用C#实现数据库的连接失败重试?代码示例是什么?的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1439930.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
如何用C#实现数据库的数据种子?初始化测试数据?
上一篇 2025年12月17日 16:36:26
C#中如何配置数据库的上下文池?有什么好处?
下一篇 2025年12月17日 16:36:44

相关推荐

发表回复

登录后才能评论
关注微信