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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:35:44