【问题标题】:SQL Server Connection Timeout C#SQL Server 连接超时 C#
【发布时间】:2012-12-10 10:54:07
【问题描述】:

首先,我想让大家知道我已经搜索了我的特定问题,但似乎找不到导致我的问题的原因。

我有一个在网络机器上运行的 SQL Server 2008 实例和一个我编写的连接到它的客户端。

为了连接,我有一小段代码建立与 sql server 2008 实例的连接并返回一个 DataTable,其中填充了我对服务器运行的任何查询的结果,所有这些都是非常标准的东西。无论如何,问题是,每当我打开程序并调用此方法时,在第一次调用我的方法时,无论我在连接字符串中设置的连接超时值是什么,大约需要 15 秒然后超时.奇怪的是,尽管我对该方法进行的第二次或第三次调用都没有问题。

如本文所述,我已在服务器计算机上为 SQL Server 打开端口:How to Open firewall ports for SQL Server,并验证它已正确配置。任何人都可以在我的代码中看到特定问题吗?

    string _connectionString = "Server=" + @Properties.Settings.Default.sqlServer + "; Initial Catalog=" + @Properties.Settings.Default.sqlInitialCatalog +
        ";User Id=" + @Properties.Settings.Default.sqlUsername + ";Password=" + @Properties.Settings.Default.sqlPassword + "; Connection Timeout=1";

    private DataTable ExecuteSqlStatement(string command)
    {
        using (SqlConnection conn = new SqlConnection(_connectionString))
        {
            try
            {
                conn.Open();
                using (SqlDataAdapter adaptor = new SqlDataAdapter(command, conn))
                {
                    DataTable table = new DataTable();
                    adaptor.Fill(table);
                    return table;
                }
            }
            catch (SqlException e)
            {
                throw e;
            }
        }
    }

我捕获的 SqlException 是:“超时已过期。在操作完成之前超时时间已过或服务器没有响应。”

这发生在 conn.Open();我包含的代码 sn-p 中的行。如果有人有任何想法,那就太好了!

附录 如果我 ping 服务器,它的响应时间为

编辑 尽管一年多后这个问题已经被浏览了超过 4000 次,但我发现虽然我 /thought/ 防火墙端口已打开,但实际上并没有。我错误地认为您需要在 Windows 中将防火墙打开到 SQL Server 使用的端口号,在我的情况下,我将其设置为允许 TCP 端口 1433 上的连接,防火墙在尝试建立初始连接时会导致问题。

我发现设置它的正确方法是设置 Windows 防火墙以允许 SQL Server 实例可执行文件通过。为此,您需要在 Windows 防火墙中添加一个程序,浏览到您的 sql 实例所在的文件夹,例如 C:\Program Files (x86)\Microsoft SQL Server\MSSQL10_50.SQLINSTANCE\MSSQL\Binn,然后将 sqlservr.exe 文件添加到防火墙规则中。

【问题讨论】:

  • 如果完全去掉连接字符串中的连接超时参数会怎样?
  • 您是否也更改了命令超时?
  • 感谢您的建议。默认超时显然是不够的,我不得不将它从默认的未定义超时 15 增加到 60 秒。这仍然是一个奇怪的问题,因为我使用的网络从客户端到服务器的延迟非常低(大约
  • 附带说明:不要像那样构建连接字符串。始终使用SqlConnectionStringBuilder!
  • @Thorsten - 感谢您的提醒,我认为它比常规字符串生成器或串联字符串更安全?

标签: c# .net sql-server-2008 timeout sqlconnection


【解决方案1】:

您将连接超时值设置为 1 秒。从连接字符串中删除它,然后重试。

或者问题可能出在您使用的 SQL 选择上。会不会需要很长时间。如果是这样,第 2 次和第 3 次调用将检索缓存的值,从而运行得更快。

【讨论】:

  • Hrm,将连接超时增加到 60 工作。这仍然是一个奇怪的问题,因为客户端和服务器之间的延迟几乎不存在。我唯一能想到的是查找需要一段时间。
  • @Termin8tor 您在这里看到的是正在运行的连接池 (msdn.microsoft.com/en-us/library/8xx3tyca(v=vs.80).aspx)。在第一次连接上,做了大量的准备工作;此后,所有意图和目的的连接都是即时的。
  • @牛嘴 - 啊!这就解释了!感谢您提供的信息,这非常有用!现在刚刚通读了一遍,听起来这正是导致我所看到的行为的原因。感谢您的洞察力!
猜你喜欢
  • 2021-12-08
  • 2016-06-20
  • 2020-07-08
  • 2010-10-22
  • 2012-06-06
  • 1970-01-01
  • 1970-01-01
  • 2012-06-14
  • 1970-01-01
相关资源
最近更新 更多