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

mrp*_*121 7 sql-server jetbrains-ide intellij-idea rider

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

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

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

将不胜感激任何帮助,谢谢

mik*_*may 7

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

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

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

为 Rider 连接配置 SQL Server:

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

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

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

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

这篇 InfoQ 文章总结了 (localdb) 的作用。它是一种轻量级的 SQL 服务器,但没有进程管理,也没有使用相同的可发现性或传输。它不会显示在 SS 配置管理单元中。

一旦您了解了 (localdb)/SQLLocalDB.exe 与其他 SS 风格(如 SQLEXPRESS)之间的区别,来自 Rider 的连接就非常简单,此处将进行介绍

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

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

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

使用 Rider 2018.2.3 测试。