首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >与SQL Server的连接有时会起作用

与SQL Server的连接有时会起作用
EN

Stack Overflow用户
提问于 2013-03-19 07:34:30
回答 23查看 207.5K关注 0票数 117

ADO.Net应用程序有时只能连接到本地网络上的另一台服务器。给定的连接尝试是成功还是失败似乎是随机的。连接使用以下形式的连接字符串:

Server=THESERVER\TheInstance;Database=TheDatabase;User

Id=TheUser;Password=ThePassword;

返回的错误为:

连接超时。尝试使用登录前握手确认时超时。

这可能是因为登录前握手失败或服务器无法及时响应。

尝试连接到此服务器时所用的持续时间是- Pre-Login initialization=42030;handshake=0;

.NET应用程序是一个执行以下代码的小型测试应用程序:

代码语言:javascript
复制
using (SqlConnection conn = new SqlConnection(cs))
using (SqlCommand cmd = new SqlCommand("SELECT COUNT(*) FROM TheTable", conn))
{
    conn.Open();
    int rowCount = (int)cmd.ExecuteScalar();
}

TheTable很小,只有78行。

但是,在.NET应用程序收到此错误的同一台机器上,我可以使用SSMS和连接字符串中指定的用户Id/密码连接到THESERVER。

为什么从ADO.Net应用程序连接可能失败,但使用来自SSMS的相同凭据成功?

EN

回答 23

Stack Overflow用户

回答已采纳

发布于 2013-03-19 07:34:30

结果是为THESERVER的IPv4地址启用了TCP/IP,但没有为IPv6地址启用。

显然,一些连接尝试最终使用了IPv4,而另一些连接则使用了IPv6。

为两个IP版本启用TCP/IP解决了此问题。

SSMS工作的事实被证明是巧合的(最初的几次尝试大概使用了IPv4)。后来一些通过SSMS进行连接的尝试导致了相同的错误消息。

要为其他IP地址启用TCP/IP,请执行以下操作:

  • Start SQL Server Configuration Manager
  • 打开节点Sql Server Network Configuration
  • Left-click Protocol for MYSQLINSTANCE
  • In在右侧窗格中,右键单击Properties
  • Select / IP
    • 单击Properties
    • Select IP Addresses选项卡,为列出的每个IP地址选择
    • ,确保Active和Enabled均为是。

    <

    • >F216
票数 102
EN

Stack Overflow用户

发布于 2016-02-12 11:51:02

我也遇到了同样的错误,与微软最新一轮的更新(2016年9月2日)可疑地一致。我发现SSMS连接没有问题,而我的ASP.NET应用程序却返回了"timeout period elapsed attempting the pre-login attempting“错误

我的解决方案是在连接字符串中添加一个30秒的连接超时,例如:

代码语言:javascript
复制
ConnectionString="Data Source=xyz;Initial Catalog=xyz;Integrated Security=True;Connection Timeout=30;"

在我的情况下,唯一受影响的连接是使用集成安全性的连接,并且我在连接之前模拟用户,其他使用SQL身份验证到同一服务器的连接工作正常!

两个测试系统(独立的客户端和Sql服务器)同时受到影响,导致我怀疑microsoft更新!

票数 42
EN

Stack Overflow用户

发布于 2015-04-15 20:35:50

我像Eric一样解决了这个问题,但做了一些其他的修改:

  • Start SQL Server Configuration Manager
  • 打开节点Sql Server Network Configuration
  • Left-click Protocol for MYSQLINSTANCE
  • In在右侧窗格中,右键单击Properties
  • Select / IP
    • 单击Properties
    • Select IP Addresses选项卡,为列出的每个IP地址选择
    • ,确保Active和Enabled均为是。

    <

    • >F215>

  • 对于列出的每个IP地址,确保TCP动态端口为空,TCP端口= 1433 (或某些其他端口)
  • 打开windows防火墙,并检查端口是否已在Incoming

中打开

票数 20
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15488922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档