【问题标题】:"Closed connection error" while trying to connect Ruby to SQL server尝试将 Ruby 连接到 SQL 服务器时出现“关闭连接错误”
【发布时间】:2012-10-04 23:18:54
【问题描述】:

这是我用来连接到 SQL Server 2012 Express 的代码。我的文件名是Connect.rb。

require "rubygems"
require "tiny_tds"
client = TinyTds::Client.new(
                    :username => 'sa',
                    :password => 'sapassword',
                    :dataserver => 'localhost\SQLEXPRESS',
                    :database => 'ContactsDB')
result = client.execute("SELECT * FROM [Contacts]") 

当我运行代码时,我收到以下错误:

在“执行”中:来自 Connect.rb 的关闭连接 (TinyTds::Error):在 '主要'

当我用以下代码替换上面的代码时,

client = TinyTds::Client.new(
                    :username => 'sa',
                    :password => 'sapassword',
                    :host => 'localhost',
                    :port => 1433,
                    :database => 'ContactsDB')

我收到以下错误:

在“连接”中:无法连接:自适应服务器不可用或 不存在

导致此错误的原因以及如何解决?

【问题讨论】:

  • 你最终修复了你的错误吗?我得到了完全相同的结果。
  • 尝试将 SQL Server 的实例名称 (localhost\SQLEXPRESS) 替换为 (local)\SQLEXPRESS 或 .\SQLEXPRESS。 Steps to troubleshoot SQL connectivity issues
  • 我知道这是旧的,但有什么解决办法吗?我正在尝试连接到 SQLEXPRESS 的本地实例,但我不能。我可以连接到远程机器上的一个实例(不是 EXPRESS),但我不能让它在我的本地实例上工作。有什么建议吗?
  • 任何人请回复,这得到修复..?总是得到client.active?是假的。

标签: ruby sql-server tiny-tds


【解决方案1】:

看起来配置没问题。 dataserver 是定义非默认实例的正确符号。

确保启用 TCP/IP 和命名管道协议(在 SQL Express 上默认禁用)。同时启用 SQL Server Browser 服务正在运行(默认禁用)。

您可以在 Microsoft SQL Server/配置工具下的开始菜单中的 Sql Server 配置管理器中找到这些。请务必在“客户端协议”和每个列出的实例中启用它们。

此外,请确保您的防火墙允许 SQL 正在侦听的端口上的连接(默认为 1433)。

无需指定端口,因为 Tiny-TDS 默认为 1433。您的第二个代码 sn-p 不包含实例。如果您在实例上设置了 SQL Express,那么您需要使用数据服务器,而不是主机,并指定实例名称。

【讨论】:

    【解决方案2】:

    我遇到了这个确切的问题,终于弄明白了。我知道这是旧的,但我希望它可以帮助未来的人。

    进入 Sql Server 配置管理器(开始 >> Microsoft SQL Server >> 配置工具)并打开 TCP/IP 和命名管道。在网络配置中,右键单击 TCP/IP,转到属性,然后是 IP 地址。您需要启用所需的连接(我使用的是 VM,所以我使用 IPv4 地址之一),以及空白 TCP 动态端口并指定一个静态端口(我使用 1433)。

    然后,您需要允许传入流量通过防火墙到达端口 1433(或任何静态端口)。

    我这样做了,终于进去了!

    【讨论】:

      【解决方案3】:

      尝试将端口号(即使它是默认值 1433)添加到配置的数据服务器值。我有一个设置,我通过流量管理器设备通过隧道到达远程网络上的 SQL Server,除非我专门设置我的配置,否则 TinyTDS 不会连接:

      dataserver: 192.168.1.1:1433\SQL1
      

      在我的情况下,在配置中设置 port: 值没有任何作用。奇怪的是需要这一步,因为无论如何 1433 是默认值,而且我的其他 SQL Server 连接配置都不需要指定端口,但在这种特殊情况下添加它对我有用。

      您可以通过运行 export TDSDUMP=/tmp/freetds.log 然后启动 irb 来测试您与 TinyTDS 的连接,同时跟踪该日志文件,从而仔细查看您的连接失败的原因。

      【讨论】:

      • 非常感谢!
      【解决方案4】:

      在 Windows 上,您需要:

      首先,您应该拥有 sql server 的所有权限,请使用 Microsoft SQL Server manager studio 执行此操作。

      第二,使用 Sql Server 配置管理器,转到 SQL SERVER 网络配置并启用您的 INSTANCE 的协议,即带有名称和 TCP/IP 的管道,启用这些,一旦这样做,您应该去 SQL SERVER Services 并启动 1. SQL Server (instance) 和 2. Sql Server Browser explorer (important)

      在 YAML 上:(Windows 上的示例)

      development:
        adapter: sqlserver
        database: GESTIONESDIVERSASDESARROLLO
        username: Admin1\Admin
        password: passw0rd
        dataserver: ADMIN1\SQLDEVELOPER
        timeout: 10
      

      【讨论】:

        猜你喜欢
        • 2021-03-26
        • 1970-01-01
        • 2015-05-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-08
        • 1970-01-01
        • 2020-07-11
        相关资源
        最近更新 更多