连接失败的最可能原因在问题的第三条评论中(Jura Gorohovsky发表),实际上已在OP中涵盖。 重申一下,详细信息
在这里。
我的问题不同,是由于对(localdb)的混淆引起的。 但在此之前,作为第一个真正的答案,我将总结Jetbrains帖子中的步骤,并解决最常见的问题。
SQL Server(SQLEXPRESS)需要启用TCP / IP才能被Rider(以及可能使用JDBC的任何进程,如Intellij和其他Jetbrains产品)访问。 需要执行以下步骤:
配置SQL Server以进行Rider连接:
- 打开适当版本的SQL Server配置管理器 - SS2017为
cmd.exe /c start C:\Windows\SysWOW64\SQLServerManager14.msc
,SS2016为SQLServerManager13.msc,SS2014为SQLServerManager12.msc。这些控制台也可以在System32中找到。
- SQL Server Services 的详细信息面板应该显示 SQL Server (SQLEXPRESS)。
- 对于 SQL Server Network Configuration->Protocols for SQLEXPrESS,确保详细信息面板显示 TCP/IP 为 Enabled。
- 在 TCP/IP->Properties->IP Addresses 中(右键单击 TCP/IP)。将 IPAll->TCP Dynamic Ports 设置为空白,将 IPAll->TCP Port 设置为1433(如果您已更改SS配置,则设置其他端口)。
- 确认所有并重新启动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 proper之间的区别,不确定SQLEXPRESS是一个独立的产品还是SS的实例,并且不熟悉SS Configuration snap-in。对于不熟悉SS的人来说,这也会表现为简单地无法连接 - 如果您没有安装SQLEXPRESS或其他SS。
这篇InfoQ文章总结了(localdb)的作用。它是SQL服务器的一种轻量级版本,但没有其过程管理功能,并且不使用相同的可发现性或传输方式。它不会显示在SS Configuration snap-in中。
一旦您理解了(localdb)/SQLLocalDB.exe与SQLEXPRESS等其他SS版本之间的区别,从Rider进行连接就非常简单,
此处进行了介绍。
将Rider连接到(localdb) - 上面提到的帖子的摘要:
- 运行
SQLLocalDB -s MSSQLLocalDB
- 在Rider的右侧面板中进行 Database->+->Data Source->SQL Server.
- 选择驱动程序为 SQL Server (Tds)
- 从URL右侧的下拉菜单中选择 LocalDB。
- 从实例下拉菜单中选择 MSSQLLocalDB(或其他可用实例)。
- 可以在文本框中指定数据库。
- 如果不使用透明验证,请提供凭据
- 进行 Test Connection 等操作。
传输是命名管道。另一端由SQLLocalDB.exe进程提供。 如果Rider保持未连接状态超过几分钟,则SQLLocalDB.exe将退出,您需要在下次使用Rider时重新运行它。 可以使用此 solution 解决此问题。
已在Rider 2018.2.3上测试。