连接失败的最可能原因在该问题的第 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 测试。