无法使用 IntelliJ/Rider 连接到 Microsoft SQL Server

Posted

技术标签:

【中文标题】无法使用 IntelliJ/Rider 连接到 Microsoft SQL Server【英文标题】:Cannot connect to Microsoft SQL Server using IntelliJ/Rider 【发布时间】:2017-12-23 05:16:35 【问题描述】:

当我尝试为我的项目创建数据库时遇到以下错误:

[08S01] 与主机 myhost、端口 1433 的 TCP/IP 连接失败。错误:“连接超时:没有更多信息。验证连接属性。确保 SQL Server 实例正在主机上运行并在端口接受 TCP/IP 连接。确保与端口的 TCP 连接未被阻止通过防火墙。”

我已经尝试了所有可以在网上找到的解决方案。我将配置管理器中的端口更改为1433,检查端口是否被防火墙阻止(不是),打开SQL Server Browse,尝试使用integratedSecurity = true int连接字符串,但没有任何效果。

不胜感激,谢谢

【问题讨论】:

您可以连接 SSMS 吗?打开 SQL Server 配置管理器。是否启用了 TCP/IP?它是否绑定到接口?例如,您可以连接到 Powershell 吗?您是否指定了正确的实例名称? SQL Server Express Edition 不会安装到默认实例。 它在 SSMS 中运行良好,它监听端口并且我使用了正确的实例名称。 TCP/IP 已启用。它不受任何事物的约束,因为它是新的和空的。 您是否执行了this post 中给出的所有建议?特别是那些在 SSCM 中启用 TCP/IP 连接并重新启动服务器以防万一的那些? ) 【参考方案1】:

连接失败的最可能原因在该问题的第 3 条评论(由 Jura Gorohovsky 撰写)中进行了解释,并且实际上已包含在 OP 中。重复一遍,详细信息是here。

我的问题有所不同,是由于对 (localdb) 的混淆造成的。但在此之前,由于这是第一个实际答案,我将总结 Jura 提到的 Jetbrains 帖子中的步骤并解决最常见的问题。

SQL Server (SQLEXPRESS) 需要启用 TCP/IP 以供 Rider 访问(可能还有其他 Jetbrains 产品,例如 Intellij,实际上是任何使用 JDBC 的进程)。需要以下步骤:

为 Rider 连接配置 SQL Server:

    打开相应版本的 SQL Server 配置管理器 - cmd.exe /c start C:\Windows\SysWOW64\SQLServerManager14.msc - SS2017、SQLServerManager13.msc - SS2016、SQLServerManager12.msc - SS2014。 System32 中也有这些插件。 SQL Server Services 的详细信息面板应显示 SQL Server (SQLEXPRESS)。 对于 SQL Server Network Configuration->Protocols for SQLEXPrESS 确保详细信息面板将 TCP/IP 行显示为 Enabled。李> 在TCP/IP->属性->IP 地址(右键单击TCP/IP)。将 IPAll->TCP 动态端口 设置为空白,将 IPAll->TCP 端口 设置为 1433(或其他,如果您更改了 SS 配置)。 确认所有并重新启动 SQL Server (SQLEXPRESS)(右键单击 SQL Server Services->SQL Server (SQLEXPrESS)),您应该能够连接到网址jdbc:jtds:sqlserver://localhost;instance=SQLEXPRESS。您也可以使用 Tds 驱动程序。

我认为 SQLEXPRESS 没有什么特别之处,您创建的任何 SS 实例都可以以相同的方式打开。

请注意,如果您使用默认端口 1433 以外的端口,则可能会遇到问题。(我目前找不到文档。)如果您在 Rider 连接页面中指定端口号,则该实例将被忽略并将与默认实例建立连接。您从 Rider 连接的实例必须设置为默认值或端口号为 1433。

我的问题: 我很早就启用了 TCP/IP,但遇到了我只能连接到某种我一无所知的默认实例的问题。这是由于我未能充分区分 (localdb) 和适当的 SQL Server,不确定 SQLEXPRESS 是单独的产品还是 SS 的实例,并且不熟悉 SS 配置管理单元。如果您碰巧没有安装 SQLEXPRESS 或其他 SS,这也会让粗心的人无法连接。

This InfoQ article总结了(localdb)的作用。它是 SQL Server 的一种轻量级版本,但没有任何进程管理员,也没有使用相同的可发现性或传输。它不会显示在 SS 配置管理单元中。

一旦您了解了 (localdb)/SQLLocalDB.exe 和其他风格的 SS(例如 SQLEXPRESS)之间的区别,来自 Rider 的连接就非常简单并且涵盖了here。

Connectiong Rider to (localdb) - 上面提到的帖子摘要:

    运行SQLLocalDB -s MSSQLLocalDB 在 Rider 右侧面板中执行 Database->+->Data Source->SQL Server。 选择驱动程序作为 SQL Server (Tds) 从 URL 右侧的下拉列表中选择 LocalDB。 从“实例”下拉列表中选择 MSSQLLocalDB(或其他可用实例)。 可选择在文本框中指定数据库。 如果不使用直通身份验证,请提供凭据 做测试连接

传输是命名管道。另一端由 SQLLocalDB.exe 进程提供。如果 Rider 保持未连接状态超过几分钟,则 SQLLocalDB.exe 将退出,您需要在下次使用 Rider 时重新运行它。这可以通过solution 解决。

使用 Rider 2018.2.3 测试。

【讨论】:

还有关于localdb的教程blog.jetbrains.com/datagrip/2016/10/07/… 令人印象深刻的描述...祝福

以上是关于无法使用 IntelliJ/Rider 连接到 Microsoft SQL Server的主要内容,如果未能解决你的问题,请参考以下文章

无法连接到 SpringTest 中由 TestContainers 创建的容器

无法使用 mongoose 连接到 Mongodb Atlas

无法使用 MEAN 堆栈连接到 Mongodb.atlas 集群

当我去声明/实现时,IntelliJ Rider 总是有两个相同的目标

无法连接到火力基地

无法在 Windows 机器上使用 sqlalchemy 连接到本地 mysql 数据库