在ASP.NET应用中连接数据库的核心是使用SqlConnection对象配合连接字符串,以下是基础实现:

using System.Data.SqlClient;
string connectionString = "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;";
using (SqlConnection connection = new SqlConnection(connectionString))
{
try
{
connection.Open();
// 数据库操作代码(查询/执行命令)
}
catch (Exception ex)
{
// 异常处理
}
}
连接字符串的权威配置方案
硬编码连接字符串存在安全风险,专业项目应采用以下方式:
- appsettings.json 配置 (ASP.NET Core)
{ "ConnectionStrings": { "DefaultConnection": "Server=.;Database=DemoDB;Trusted_Connection=True;Encrypt=True;" } } - 环境变量注入
var builder = WebApplication.CreateBuilder(args); var connectionString = builder.Configuration.GetConnectionString("DefaultConnection");
企业级最佳实践方案
连接池优化
"Server=.;Database=DemoDB;Max Pool Size=200;Min Pool Size=10;Connection Timeout=30;"
Max Pool Size:控制最大连接数(默认100)Connection Lifetime:连接存活时间(秒)
异步高性能连接
public async Task<List<Product>> GetProductsAsync()
{
using (var conn = new SqlConnection(_config.GetConnectionString("DefaultConnection")))
{
await conn.OpenAsync();
return await conn.QueryAsync<Product>("SELECT FROM Products");
}
}
安全加固关键措施
加密敏感配置
使用Azure Key Vault或ASP.NET Core数据保护API:

builder.Services.AddDbContext<AppDbContext>(options =>
options.UseSqlServer(
new SqlConnectionStringBuilder(
builder.Configuration["ConnectionStrings:DefaultConnection"])
{
Password = builder.Configuration["DbPassword"] // 从安全存储获取
}.ConnectionString
)
);
Windows集成身份验证
"Server=dbserver;Database=master;Integrated Security=SSPI;TrustServerCertificate=True;"
防SQL注入规范
using (var command = new SqlCommand("SELECT FROM Users WHERE Username = @username", connection))
{
command.Parameters.AddWithValue("@username", userInput);
// 执行命令
}
现代架构演进方案
依赖注入容器管理
// Startup.cs
services.AddScoped(_ => new SqlConnection(
Configuration.GetConnectionString("DefaultConnection")));
// Controller使用
public class ProductController
{
private readonly SqlConnection _connection;
public ProductController(SqlConnection connection) => _connection = connection;
}
Entity Framework Core集成
services.AddDbContext<AppDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"),
sqlOptions => sqlOptions.EnableRetryOnFailure()));
故障排查权威指南
连接异常处理模板
try
{
using (var conn = new SqlConnection(connString))
{
await conn.OpenAsync();
// 业务代码
}
}
catch (SqlException ex) when (ex.Number == 18456) // 登录失败
{
_logger.LogError($"身份验证失败:{ex.Message}");
}
catch (SqlException ex) when (ex.Number == -2) // 连接超时
{
_logger.LogWarning($"连接超时,尝试备用服务器...");
// 故障转移逻辑
}
连接监控命令
SELECT
session_id, connect_time, last_read, last_write
FROM sys.dm_exec_connections
WHERE session_id = @@SPID
深度思考: 在云原生架构下,传统的连接池配置是否需要重新设计?当应用部署到Kubernetes集群,数据库连接的生命周期管理面临这些挑战:
- 动态扩缩容导致的连接风暴
- 跨可用区部署的延迟敏感问题
- Serverless数据库的按需连接策略
您在实际项目中如何处理高并发下的数据库连接瓶颈?是否有遇到过连接池耗尽引发的生产事故?欢迎分享您的架构设计经验与解决方案。

原创文章,作者:世雄 - 原生数据库架构专家,如若转载,请注明出处:https://idctop.com/article/19052.html