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

7
当我尝试为我的项目创建数据库时,遇到以下错误:
[08S01] TCP/IP 连接到主机 myhost 的 1433 端口失败。错误:“连接超时: 没有更多信息。请验证连接属性。确保 SQL Server 实例在主机上运行并接受端口的 TCP/IP 连接。确保端口的 TCP 连接未被防火墙阻止。”
我已经尝试了网上找到的所有可能的解决方案。我在配置管理器中将端口改为了 1433,检查了防火墙是否阻止了端口(没有),打开了 SQL Server 浏览器,并尝试在连接字符串中使用了“integratedSecurity = true”,但仍然无法解决问题。
希望能得到任何帮助,谢谢。

你能连接到SSMS吗?打开SQL Server配置管理器。TCP/IP是否启用?它是否绑定到接口?例如,你能用PowerShell连接吗?你是否指定了正确的实例名称?SQL Server Express Edition不会安装到默认实例。 - Bacon Bits
它在SSMS中运行良好,它监听端口并且我正在使用正确的实例名称。TCP/IP已启用。它没有绑定到任何东西,因为它是新的和空的。 - mrpink121
1
你是否按照此篇文章中提供的所有建议进行操作?特别是在SSCM中启用TCP/IP连接并重新启动服务器这些步骤? - Jura Gorohovsky
1个回答

12
连接失败的最可能原因在问题的第三条评论中(Jura Gorohovsky发表),实际上已在OP中涵盖。 重申一下,详细信息在这里
我的问题不同,是由于对(localdb)的混淆引起的。 但在此之前,作为第一个真正的答案,我将总结Jetbrains帖子中的步骤,并解决最常见的问题。
SQL Server(SQLEXPRESS)需要启用TCP / IP才能被Rider(以及可能使用JDBC的任何进程,如Intellij和其他Jetbrains产品)访问。 需要执行以下步骤:
配置SQL Server以进行Rider连接:
  1. 打开适当版本的SQL Server配置管理器 - SS2017为 cmd.exe /c start C:\Windows\SysWOW64\SQLServerManager14.msc,SS2016为SQLServerManager13.msc,SS2014为SQLServerManager12.msc。这些控制台也可以在System32中找到。
  2. SQL Server Services 的详细信息面板应该显示 SQL Server (SQLEXPRESS)
  3. 对于 SQL Server Network Configuration->Protocols for SQLEXPrESS,确保详细信息面板显示 TCP/IPEnabled
  4. TCP/IP->Properties->IP Addresses 中(右键单击 TCP/IP)。将 IPAll->TCP Dynamic Ports 设置为空白,将 IPAll->TCP Port 设置为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 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) - 上面提到的帖子的摘要:
  1. 运行 SQLLocalDB -s MSSQLLocalDB
  2. 在Rider的右侧面板中进行 Database->+->Data Source->SQL Server.
  3. 选择驱动程序为 SQL Server (Tds)
  4. 从URL右侧的下拉菜单中选择 LocalDB
  5. 从实例下拉菜单中选择 MSSQLLocalDB(或其他可用实例)。
  6. 可以在文本框中指定数据库。
  7. 如果不使用透明验证,请提供凭据
  8. 进行 Test Connection 等操作。

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

已在Rider 2018.2.3上测试。


还有一个关于LocalDB的教程,可以在这里找到:https://blog.jetbrains.com/datagrip/2016/10/07/connecting-datagrip-to-sql-server-express-localdb/ - moscas
令人印象深刻的描述...祝福 - Minasie Shibeshi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接