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

当数据库连接不稳定时,实现自动重试机制能有效提升程序的健壮性。在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
微信扫一扫
支付宝扫一扫