You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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或.\SQLEXPRESS
  • Database:目标数据库名称
  • 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.11 10:22:33