C# 连接数据库方法 C#如何实现数据库连接

2次阅读

最推荐使用 microsoft.data.sqlclient(.net core/.net 5+)或 system.data.sqlclient(.net framework)连接 sql server,配合 using 确保自动释放、配置文件管理连接字符串、并实现异常重试机制。

C# 连接数据库方法 C#如何实现数据库连接

使用 SqlConnection 连接 SQL Server(最常用)

在 C# 中连接 SQL Server 数据库,最标准的方式是使用 System.Data.SqlClient(.NET Framework)或 Microsoft.Data.SqlClient(.NET Core/.NET 5+ 推荐)。后者是前者开源、跨平台的继任者,支持最新安全协议和 azure AD 认证。

连接字符串示例(windows 身份验证):

Server=localhostSQLEXPRESS;Database=MyDB;Trusted_Connection=true;

连接字符串示例(SQL 账户验证):

Server=localhost;Database=MyDB;User Id=myuser;Password=mypass123;

⚠️ 注意:Trusted_Connection=trueIntegrated Security=true 等价;若用 Microsoft.Data.SqlClient,需先通过 NuGet 安装包:Install-Package Microsoft.Data.SqlClient

用 using 确保连接自动释放(关键实践)

数据库连接是稀缺资源,必须显式关闭或用 using 语句确保及时释放。以下写法安全可靠:

using (var conn = new SqlConnection(connectionString)) {     conn.Open();     using (var cmd = new SqlCommand("SELECT COUNT(*) FROM Users", conn))     {         int count = (int)cmd.ExecuteScalar();         Console.WriteLine($"用户数:{count}");     } }

上面代码中,conncmd 都会在作用域结束时自动调用 Dispose(),即使发生异常也不会泄漏连接。不推荐手动调用 conn.Close() 或忽略 using —— 容易引发连接池耗尽、超时等生产问题。

连接字符串从配置文件读取(避免硬编码)

开发中应将连接字符串放在 appsettings.json(.NET Core/.NET 5+)或 App.config(.NET Framework)中,而非写死在代码里。

.NET 6+ 示例(appsettings.json):

{   "ConnectionStrings": {     "DefaultConnection": "Server=localhost;Database=MyDB;User Id=myuser;Password=mypass123;"   } }

Program.cs 中注入并使用:

var connectionString = builder.Configuration.GetConnectionString("DefaultConnection"); using var conn = new SqlConnection(connectionString);

这样做便于环境隔离(开发/测试/生产不同连接串)、配合密钥管理器(如 Azure Key Vault)和 CI/CD 流水线安全替换。

处理连接失败与重试逻辑(提升健壮性)

网络波动或 SQL Server 暂时不可用会导致 SqlException。简单重试 2–3 次可显著提升稳定性:

int maxRetries = 3; for (int i = 0; i <= maxRetries; i++) {     try     {         using var conn = new SqlConnection(connectionString);         conn.Open();         // 执行操作...         break; // 成功则退出循环     }     catch (SqlException ex) when (ex.Number == -2 || ex.Number == 10060 && i < maxRetries)     {         Thread.Sleep(1000 * (int)Math.Pow(2, i)); // 指数退避     } }

常见错误号:-2(超时)、10060(连接被拒绝)、4060(数据库不存在)、18456(登录失败)。建议结合 Polly 库实现更专业的重试策略。

连接最容易被忽略的问题是:未校验连接状态就直接执行命令。例如 conn.State != ConnectionState.Open 时调用 cmd.ExecuteNonQuery() 会抛出异常。应在执行前加判断,或依赖 using + Open() 的组合天然规避该问题。

text=ZqhQzanResources