尝试将Ruby连接到SQL服务器时出现“已关闭连接错误”

时间:2012-10-15 00:33:24

标签: ruby sql-server tiny-tds

这是我用来连接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]") 

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

  

在'execute'中:来自Connect.rb的封闭连接(TinyTds :: Error):in   '主'

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

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

我收到以下错误:

  中的

:无法连接:Adaptive Server不可用或   不存在

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

4 个答案:

答案 0 :(得分:3)

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

确保启用了TCP / IP和命名管道协议(默认情况下,它在SQL Express上禁用)。还启用SQL Server Browser服务正在运行(默认情况下禁用)。

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

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

无需指定端口,因为Tiny-TDS默认为1433.您的第二个代码段不包含实例。如果在实例上安装了SQL Express,则需要使用dataserver,而不是host,并指定实例名称。

答案 1 :(得分:2)

我遇到了这个确切的问题并最终弄明白了。我知道这已经过时了,但我希望它可能在将来帮助人们。

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

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

我这样做了,最后进来了!

答案 2 :(得分:2)

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

dataserver: 192.168.1.1:1433\SQL1

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

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

答案 3 :(得分:1)

在Windows上,您需要:

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

第二,使用Sql Server配置管理器,转到SQL SERVER网络配置并启用INSTANCE的协议,即具有名称和TCP / IP的管道,这些是启用的,一旦这样做,你应该去SQL SERVER服务并启动1. SQL Server(实例)和2. Sql Server浏览器资源管理器(重要)

在YAML上:(在Windows上的例子)

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