SQL Server 登录前握手

Posted

技术标签:

【中文标题】SQL Server 登录前握手【英文标题】:SQL Server Pre-Login Handshake 【发布时间】:2014-12-08 01:21:32 【问题描述】:

我正在通过我的 ASP .NET 应用程序连接到 MSSQL 数据库,但有时我在打开连接时遇到此错误。

连接超时。尝试使用登录前握手确认时超时时间已过。这可能是因为登录前握手失败或服务器无法及时响应。尝试连接到此服务器所花费的持续时间是 - [Pre-Login] 初始化 = 3;握手=14996;

为了暂时解决这个问题,我必须重新启动 IIS。我正在使用此代码 sn-p 连接到 MSSQL:

        using (SqlConnection connection = new SqlConnection(connectionString))
        
            connection.Open();

            /* my commands here */

            connection.Close();
            connection.Dispose();
            SqlConnection.ClearPool(connection);
        

我在入站和出站规则中允许端口 1433,但没有更改。当我按照那里的说明进行操作时:

SQL Server Pre-Login Handshake Acknowledgement Error Connection to SQL Server Works Sometimes

但没有任何改变。

【问题讨论】:

【参考方案1】:

根据 MSDN 文档。

ClearPool 清除与连接关联的连接池。如果与连接关联的其他连接在调用时正在使用,它们会被适当地标记并在关闭时被丢弃(而不是返回到池中)呼唤他们。

你应该在connection.close之前使用ClearPool方法

参考:https://msdn.microsoft.com/zh-tw/library/system.data.sqlclient.sqlconnection.clearpool(v=vs.110).aspx

如果你使用 Using 语法来管理 Object 你不应该使用 connection.close 方法

因为它会在它们运行到 end 时调用。只需打开您的连接并执行您的命令

 using (SqlConnection connection = new SqlConnection(connectionString))
    
        connection.Open();
        SqlConnection.ClearPool(connection);
        /* my commands here */
        SqlCommand cmd = new SqlCommand("your command",conn);
        cmd.ExecuteReader()


    

参考示例:https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396

最后确保 SQL Server 网络配置正确

【讨论】:

有没有找到解决方案?尝试从远程 m/c 连接到 SQL 服务器时,我收到了类似的错误,但来自 SSMS(管理工作室)。 @Aamir 你检查你的防火墙设置了吗?如果您来自远程,您应该为 SQL Server 打开 1433(默认)端口 @KingJk 最初的问题是关于不可用的零星事件。防火墙要么总是工作,要么总是坏,不是吗?我也有同样的问题。偶尔在 Management Studio 中长时间握手。 (每周一次) @przemo_li 出现此问题时,我总是关闭防火墙。为了防止防火墙影响握手包发送。您可以跟踪 SQL 服务器日志 :) ref : msdn.microsoft.com/en-us/library/ms187109.aspx【参考方案2】:

对我来说,诀窍是增加连接字符串的超时时间,因为当通过 *** 连接时,建立连接需要很长时间。您可以通过添加 ;connection timeout = value

来做到这一点

当我在 *** 上连接应用程序尝试连接到 sql server 时,我遇到了同样的错误。

默认情况下,超时设置为 15 秒。

希望对你有帮助!

【讨论】:

以上是关于SQL Server 登录前握手的主要内容,如果未能解决你的问题,请参考以下文章

sql server进行远程连接出现这样错误:...登录前的握手期间发生错误

直接连接到 SQL Azure 的登录前握手问题

已成功与服务器建立连接,但是在登录前的握手期间发生错误。 (provider: SSL Provider, error: 0 - 等待的

已成功与服务器建立连接,但是在登录前的握手期间发生错误。

在C#里连接SQL 2008 报错:已成功与服务器建立连接 但登录前握手期间发生错误 网络名不可再用

在我的 ASP.Net 项目中无法从 VS2019 连接到 SQL Server 数据库