2012-10-15 58 views
8

这是我用于连接到SQL Server 2012 express的代码。我的文件名是Connect.rb尝试将Ruby连接到SQL服务器时出现“关闭连接错误”

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

当我运行代码,我发现了以下错误:

in 'execute' :closed connection (TinyTds::Error) from Connect.rb: in 'main'

当我通过以下替换上面的代码,

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

我得到以下错误:

in 'connect': Unable to connect: Adaptive server is unavailable or does not exist

什么是ca使用这个错误以及如何解决它?

+3

你最终修复了你的bug吗?我得到完全相同的结果。 – christianblais

+0

尝试用'(local)\ SQLEXPRESS'或'。\ SQLEXPRESS'替换SQL Server的实例名称('localhost \ SQLEXPRESS')。 [步骤来解决SQL连接问题](http://blogs.msdn.com/b/sql_protocols/archive/2008/04/30/steps-to-troubleshoot-connectivity-issues.aspx) –

+1

我知道这是旧的,但有没有解决这个问题?我试图连接到本地的SQLEXPRESS,但我不能。我可以连接到远程机器上的一个实例(不是EXPRESS),但我无法使其在本地实例上工作。有小费吗? – Migore

回答

3

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

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

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

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

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

1

在Windows上,您需要:

首先,你应该有SQL服务器上的所有permision,与Microsoft SQL Server管理工作室做到这一点。

,使用SQL Server配置管理器,进入SQL Server网络配置,使您的实例的协议,那是管道与名称和TCP/IP,那些被启用,一旦做到这一点,你应该去SQL Server服务并启动1的SQL Server(实例)和2 SQL Server浏览探险家(重要)

上YAML:

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

我有这个确切的问题终于想通了(在Windows例子) 。我知道这很老了,但我希望它可以帮助未来的人。

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

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

我做到了,终于进去了!

2

尝试将端口号(即使它的默认值为1433)添加到您的配置的dataserver值。我有一个安装在那里我是隧穿的流量管理设备,以达到远程网络上的SQL Server和TinyTDS将无法连接,除非我专门设置我的配置,如:

dataserver: 192.168.1.1:1433\SQL1 

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

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

+0

非常感谢! –

相关问题