SQL Server连接错误26:DataGrid执行Fill方法时超时故障求助
解决DataGrid.Fill方法SQL连接超时问题
这种情况我可太熟了——数据源向导预览一切正常,一到代码里调用Fill就报连接错误,简直让人头大。咱们一步步来排查:
1. 核对连接字符串是否一致
数据源向导里的连接字符串是经过验证的,但代码里用的可能是另一套!比如你可能硬编码了旧的连接字符串,或者配置文件里的连接字符串和向导里的不一样。
操作步骤:打开数据源向导的「连接属性」窗口,复制完整的连接字符串,然后直接替换代码里
SqlConnection初始化时用的字符串,再测试Fill方法。
2. 检查查询语句的复杂度和数据量
预览数据时,向导通常只会返回少量数据(比如TOP 100),但Fill方法执行的可能是全表查询或者复杂的多表关联,导致数据量过大超时。
- 先把SQL语句改成
SELECT TOP 100 * FROM YourTable测试,如果能成功,说明是查询的问题:- 优化SQL语句(比如加索引、减少返回字段)
- 延长命令超时时间:给
SqlDataAdapter.SelectCommand设置CommandTimeout = 60;(默认是30秒)
3. 确认SQL Server的网络配置
虽然预览正常,但某些场景下TCP/IP协议可能没启用,或者防火墙拦截了连接:
- 打开「SQL Server配置管理器」,找到「SQL Server网络配置」→ 对应实例的「TCP/IP」,确保状态是「启用」
- 临时关闭Windows防火墙测试,如果能成功,就给SQL Server的端口(默认1433)添加防火墙允许规则
4. 排查连接池问题
有时候连接池里的失效连接会导致获取连接超时,可以试试:
- 在代码里用
using块确保连接被正确释放(像下面的示例一样) - 测试环境下可以调用
SqlConnection.ClearAllPools();清空连接池,再执行Fill方法
示例代码(正确的Fill用法)
// 用向导里复制的连接字符串 string connStr = "Data Source=YOUR_SERVER;Initial Catalog=YOUR_DB;Integrated Security=True"; using (SqlConnection conn = new SqlConnection(connStr)) { // 先测试简单查询 string sql = "SELECT TOP 100 * FROM YourTargetTable"; SqlDataAdapter adapter = new SqlDataAdapter(sql, conn); // 延长超时时间到60秒 adapter.SelectCommand.CommandTimeout = 60; DataTable dt = new DataTable(); try { adapter.Fill(dt); yourDataGrid.DataSource = dt; } catch (Exception ex) { // 打印完整错误信息,方便排查 Console.WriteLine(ex.ToString()); } }
如果以上方法都没解决,建议去SQL Server的「错误日志」里找更详细的报错信息,比如是不是权限不足、实例名拼写错误之类的细节。
内容的提问来源于stack exchange,提问作者KySoto
相关产品推荐
相关产品推荐

