Ошибка закрытого соединения при попытке подключить Ruby к SQL-серверу

Это код, который я использую для подключения к 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]") 

Когда я запускаю код, я получаю следующую ошибку:

в «выполнить»: закрытое соединение (TinyTds:: Error) из Connect.rb: в «основном»

когда я заменяю приведенный выше код следующим,

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

Я получаю следующую ошибку:

в «подключиться»: невозможно подключиться: адаптивный сервер недоступен или не существует

Что вызывает эту ошибку и как ее исправить?


person Richard77    schedule 15.10.2012    source источник
comment
Вы наконец исправили свою ошибку? Я получаю точно такой же результат.   -  person christianblais    schedule 22.11.2012
comment
Попробуйте заменить имя экземпляра SQL Server (localhost\SQLEXPRESS) на (local)\SQLEXPRESS ИЛИ .\SQLEXPRESS. Действия по устранению неполадок SQL проблемы с подключением   -  person Bogdan Sahlean    schedule 28.01.2013
comment
Я знаю, что это старо, но есть ли какое-нибудь решение для этого? Я пытаюсь подключиться к локальным экземплярам SQLEXPRESS и не могу. Я мог подключиться к экземпляру (не EXPRESS) на удаленной машине, но не смог заставить его работать на моем локальном экземпляре. Какие-нибудь советы?   -  person Migore    schedule 17.10.2013
comment
Кто-нибудь, пожалуйста, ответьте, это было исправлено ..? всегда получаешь client.active? является ложным.   -  person Jyothu    schedule 31.12.2014


Ответы (4)


Вроде с конфигом все в порядке. dataserver является правильным символом для определения экземпляра не по умолчанию.

Убедитесь, что протоколы TCP/IP и именованных каналов включены (по умолчанию они отключены в SQL Express). Также включите службу обозревателя SQL Server (по умолчанию отключено).

Вы можете найти их в диспетчере конфигурации Sql Server в меню «Пуск» в разделе Microsoft SQL Server/Инструменты настройки. Обязательно включите их как в «Клиентских протоколах», так и в каждом из перечисленных экземпляров.

Кроме того, убедитесь, что ваш брандмауэр разрешает подключения к порту, который прослушивает SQL (по умолчанию 1433).

Нет необходимости указывать порт, так как Tiny-TDS по умолчанию имеет значение 1433. Ваш второй фрагмент кода не включает экземпляр. Если у вас есть установка SQL Express на экземпляре, вам нужно использовать сервер данных, а не хост, и указать имя экземпляра.

person Dustin Davis    schedule 28.01.2013

У меня была именно эта проблема, и я, наконец, понял это. Я знаю, что это старо, но я надеюсь, что это может помочь людям в будущем.

Перейдите в Диспетчер конфигурации сервера Sql (Пуск >> Microsoft SQL Server >> Инструменты настройки) и включите TCP/IP и именованные каналы. В конфигурации сети щелкните правой кнопкой мыши TCP/IP, перейдите в «Свойства», затем «IP-адреса». Вам нужно включить нужное соединение (я использую виртуальную машину, поэтому я использовал адрес IPv4), а также отключить динамические порты TCP и указать статический порт (я использую 1433).

Затем вам нужно разрешить входящий трафик на порт 1433 (или любой другой ваш статический порт) через брандмауэр.

Я сделал это и, наконец, попал!

person vlyandra    schedule 30.03.2014

Попробуйте добавить номер порта (даже если это значение по умолчанию 1433) к значению сервера данных вашей конфигурации. У меня была установка, в которой я туннелировал через устройство диспетчера трафика, чтобы получить доступ к SQL Server в удаленной сети, и TinyTDS не подключался, если я специально не настроил свою конфигурацию, например:

dataserver: 192.168.1.1:1433\SQL1

Установка значения port: в конфиге в моем случае ничего не дала. Странно, что этот шаг был необходим, поскольку 1433 в любом случае является значением по умолчанию, и ни в одной из моих других конфигураций подключения к SQL Server не требовалось указывать порт, но его добавление — это то, что сработало для меня в этом конкретном случае.

Вы можете просмотреть свой файл журнала FreeTDS, чтобы лучше понять, почему ваше соединение не работает, запустив export TDSDUMP=/tmp/freetds.log, а затем запустив irb, чтобы проверить ваше соединение с TinyTDS, следя за этим файлом журнала.

person alkalinecoffee    schedule 16.04.2014
comment
Большое спасибо! - person Andre Figueiredo; 11.02.2017

В Windows вам нужно:

Во-первых, у вас должны быть все разрешения на сервере sql, сделайте это с помощью студии менеджера Microsoft SQL Server.

Во-вторых, с помощью диспетчера конфигурации Sql Server перейдите к конфигурации сети SQL SERVER и включите протоколы вашего ЭКЗЕМПЛЯРА, это конвейер с именем и TCP/IP, которые должны быть включены, после этого вы должны перейти к Службы SQL SERVER и запуск 1. SQL Server (экземпляр) и 2. Обозреватель Sql Server Browser (важно)

на YAML: (пример на окнах)

development:
  adapter: sqlserver
  database: GESTIONESDIVERSASDESARROLLO
  username: Admin1\Admin
  password: passw0rd
  dataserver: ADMIN1\SQLDEVELOPER
  timeout: 10
person Daniel Antonio Nuñez Carhuayo    schedule 04.10.2013