2026-01-27 15:07:05
配置C#应用程序的数据库超时需根据数据访问方式选择对应方法,主要分为连接超时(建立连接)和命令超时(执行查询)两类,具体设置位置如下:
1. 连接超时(Connection Timeout)控制数据库连接建立的最大等待时间,默认通常为15秒,仅在连接字符串中设置。
单位为秒,设为0表示无限等待(不推荐)。
仅影响连接阶段,不控制后续查询执行时间。
控制SQL语句执行的最大时间,默认30秒,超过则抛出异常。根据数据访问技术不同,设置方式如下:
ADO.NET通过SqlCommand对象的CommandTimeout属性设置:
var connection = new SqlConnection(connectionString);connection.Open();var command = new SqlCommand("SELECT * FROM LargeTable", connection);command.CommandTimeout = 120; // 设置为120秒var reader = command.ExecuteReader();设为0表示无限制(易导致资源耗尽,生产环境慎用)。
需手动为每个命令设置,灵活性高。
EF6为全局设置,EF Core支持更细粒度配置(如按查询设置)。
推荐在初始化时统一配置,避免硬编码。
通过执行方法(如QueryAsync)的commandTimeout参数显式传入:
using (var connection = new SqlConnection(connectionString)) { var result = await connection.QueryAsync<YourModel>( "SELECT * FROM LargeTable", commandTimeout: 60 // 本次查询超时60秒 );}每次查询需单独设置,适合需要动态调整的场景。
与ADO.NET类似,但更轻量级。
连接超时:仅影响连接建立阶段(如网络延迟、数据库服务未启动)。
命令超时:影响查询执行阶段(如复杂查询、锁等待)。
根据实际业务需求调整,避免默认值导致卡顿或资源浪费。
生产环境避免设为0(无限制),防止雪崩效应。
复杂查询或大数据量操作可适当延长超时时间。
通过日志记录超时异常,定位性能瓶颈。
结合数据库监控工具(如SQL Server Profiler)分析慢查询。
ADO.NET:SqlCommand.CommandTimeout。
EF6:DbContext.Database.CommandTimeout。
EF Core:UseSqlServer(options => options.CommandTimeout())。
Dapper:QueryAsync(commandTimeout: ...)。
根据项目使用的数据访问技术选择对应方法,平衡性能与资源使用,避免因超时设置不当导致应用异常或资源耗尽。