这是我用来连接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不可用或 不存在
导致此错误的原因是什么以及如何解决?
答案 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