Dapper连接用户指南:SQL Server连接类型与实现管理方法咨询
Dapper连接SQL Server数据库参考指南
核心连接类型及实现
1. 基础SqlConnection直连
这是最基础的连接方式,手动控制连接的开闭,适合简单场景。
- 示例代码:
using System.Data.SqlClient; using Dapper; // 定义连接字符串 string connectionString = "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;"; // 同步操作 using (var connection = new SqlConnection(connectionString)) { connection.Open(); var userNames = connection.Query<string>("SELECT Name FROM Users WHERE Id = @Id", new { Id = 1 }); } // 异步操作 using (var connection = new SqlConnection(connectionString)) { await connection.OpenAsync(); var userNames = await connection.QueryAsync<string>("SELECT Name FROM Users WHERE Id = @Id", new { Id = 1 }); }
- 关键方法:
Open()/OpenAsync()(打开连接)、Query()/QueryAsync()(查询数据)、Execute()/ExecuteAsync()(执行增删改)、Close()(手动释放,using块会自动完成) - 配置注意:连接字符串需明确服务器地址、数据库名、认证方式(SQL账号/Windows集成)
2. 连接池管理(默认启用)
SQL Server默认启用连接池,由SqlConnection自动维护,避免频繁创建销毁连接的性能损耗。
- 使用方式:和基础直连代码一致,通过连接字符串参数控制池行为
- 核心配置参数:
Pooling=true(默认开启,设为false可关闭连接池)Max Pool Size=100(默认最大连接数,可根据业务调整)Min Pool Size=0(默认最小空闲连接数)Connection Timeout=15(连接超时时间,单位秒)
- 注意事项:必须用
using块包裹连接,确保连接被正确释放回池,避免长期持有连接导致池耗尽
3. 依赖注入(DI)集成的连接管理
在ASP.NET Core等依赖注入场景下,可将SqlConnection注册为服务,自动管理连接生命周期。
- 注册示例(Program.cs):
using Microsoft.Extensions.DependencyInjection; using System.Data.SqlClient; var builder = WebApplication.CreateBuilder(args); // 注册Scoped生命周期的SqlConnection,读取配置文件中的连接字符串 builder.Services.AddScoped<SqlConnection>(sp => new SqlConnection(builder.Configuration.GetConnectionString("DefaultConnection"))); var app = builder.Build();
- 使用示例(业务服务类):
public class UserService { private readonly SqlConnection _connection; public UserService(SqlConnection connection) { _connection = connection; } public async Task<string> GetUserName(int id) { await _connection.OpenAsync(); return await _connection.QueryFirstOrDefaultAsync<string>( "SELECT Name FROM Users WHERE Id = @Id", new { Id = id }); } }
- 优势:依赖注入自动按请求周期(Scoped)创建和释放连接,无需手动管理
4. 事务连接
用于执行多步原子操作,确保数据一致性。
- 示例代码:
using (var connection = new SqlConnection(connectionString)) { await connection.OpenAsync(); using (var transaction = connection.BeginTransaction()) { try { // 执行日志插入 await connection.ExecuteAsync( "INSERT INTO OperationLogs (Content) VALUES (@Content)", new { Content = "更新用户登录时间" }, transaction: transaction); // 执行用户信息更新 await connection.ExecuteAsync( "UPDATE Users SET LastLoginTime = GETDATE() WHERE Id = @Id", new { Id = 1 }, transaction: transaction); transaction.Commit(); } catch { transaction.Rollback(); throw; } } }
- 关键方法:
BeginTransaction()/BeginTransactionAsync()(开启事务)、Commit()(提交事务)、Rollback()(回滚事务)
常用配置与方法汇总
连接字符串常用参数
Server:SQL Server实例地址,本地可填localhost或.\SQLEXPRESSDatabase:目标数据库名称User Id/Password:SQL Server认证的账号和密码Integrated Security=True:使用Windows集成认证(无需账号密码)TrustServerCertificate=True:跳过SSL证书验证(仅开发环境建议使用)
Dapper核心扩展方法
- 查询类:
Query<T>、QueryFirst<T>、QueryFirstOrDefault<T>、QuerySingle<T>、QuerySingleOrDefault<T>(均有异步版本) - 执行类:
Execute、ExecuteScalar(均有异步版本) - 多结果集:
QueryMultiple(一次性获取多个查询结果,适合关联查询场景)
内容的提问来源于stack exchange,提问作者Dalski
相关产品推荐
相关产品推荐

