2012-10-15 51 views
8

Đây là mã tôi đang sử dụng để kết nối với máy chủ SQL 2012 express. Tên tệp của tôi là Connect.rb."Lỗi kết nối bị đóng" trong khi cố gắng kết nối máy chủ Ruby với 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]") 

Khi tôi chạy mã này, tôi nhận được lỗi sau:

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

khi tôi thay thế mã trên bằng cách sau đây,

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

tôi nhận được lỗi sau :

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

Điều gì là ca sử dụng lỗi này và cách sửa lỗi?

+3

Cuối cùng bạn đã sửa lỗi của mình chưa? Tôi nhận được kết quả chính xác. – christianblais

+0

Cố gắng thay thế tên cá thể của SQL Server ('localhost \ SQLEXPRESS') bằng' (local) \ SQLEXPRESS' OR '. \ SQLEXPRESS'. [Các bước khắc phục sự cố kết nối SQL] (http://blogs.msdn.com/b/sql_protocols/archive/2008/04/30/steps-to-troubleshoot-connectivity-issues.aspx) –

+1

Tôi biết điều này là cũ nhưng Có bất kỳ sửa chữa cho điều này? Tôi đang cố gắng kết nối với một bản địa của SQLEXPRESS và tôi không thể. Tôi có thể kết nối với một thể hiện (không EXPRESS) trong một máy từ xa, nhưng tôi không thể làm cho nó hoạt động trên cá thể cục bộ của tôi. Có lời khuyên nào không? – Migore

Trả lời

3

Dường như cấu hình là ok. dataserver là biểu tượng chính xác để xác định một cá thể không mặc định.

Đảm bảo rằng giao thức TCP/IP và đặt tên cho đường ống được bật (nó được tắt theo mặc định trên SQL Express). Cũng cho phép dịch vụ Trình duyệt SQL Server đang chạy (bị tắt theo mặc định).

Bạn có thể tìm thấy chúng trong Trình quản lý cấu hình máy chủ Sql trong trình đơn bắt đầu trong Microsoft SQL Server/Công cụ cấu hình. Hãy chắc chắn để kích hoạt chúng trong cả hai 'Giao thức khách hàng' và trên mỗi trường hợp được liệt kê.

Ngoài ra, hãy đảm bảo rằng tường lửa của bạn cho phép kết nối trên cổng SQL đang lắng nghe (mặc định là 1433).

Không cần chỉ định cổng vì Tiny-TDS mặc định là 1433. Đoạn mã thứ hai của bạn không bao gồm một phiên bản. Nếu bạn có thiết lập SQL Express trên một cá thể thì bạn cần phải sử dụng dataserver, không phải máy chủ, và chỉ định tên cá thể.

1

Trên Windows, bạn cần:

Đầu tiên, bạn nên có tất cả permision trên máy chủ sql, làm điều này với hãng quản lý của Microsoft SQL Server.

Thứ hai, với Trình quản lý cấu hình SQL Server và bật giao thức của INSTANCE, đó là đường dẫn có tên và TCP/IP, chúng được kích hoạt, một khi thực hiện điều đó, bạn nên truy cập SQL Dịch vụ sERVER và bắt đầu 1. SQL server (chẳng hạn) và 2. Sql server Browser explorer (quan trọng)

trên YAML: (ví dụ trên cửa sổ)

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

tôi có vấn đề này chính xác và cuối cùng figured it out . Tôi biết điều này là cũ nhưng tôi hy vọng nó có thể giúp mọi người trong tương lai.

Đi vào Trình quản lý cấu hình máy chủ Sql (Bắt đầu >> Microsoft SQL Server >> Công cụ cấu hình) và bật TCP/IP và Đặt tên cho đường ống. Trong cấu hình mạng, kích chuột phải vào TCP/IP, vào Properties, sau đó là IP Addresses. Bạn cần phải kích hoạt kết nối bạn muốn (tôi đang sử dụng một máy ảo, vì vậy tôi đã sử dụng một địa chỉ IPv4), cũng như làm trống cổng TCP động và chỉ định một cổng tĩnh (tôi sử dụng 1433).

Sau đó, bạn cần cho phép lưu lượng truy cập đến cổng 1433 (hoặc bất kỳ cổng tĩnh nào của bạn) thông qua tường lửa của bạn.

Tôi đã làm điều này và cuối cùng đã tham gia!

2

Thử thêm số cổng (ngay cả khi đó là số mặc định là 1433) vào giá trị dataserver của cấu hình của bạn. Tôi đã có một thiết lập mà tôi đã đào hầm thông qua một thiết bị quản lý giao thông để đạt được một SQL Server trên một mạng từ xa, và TinyTDS sẽ không kết nối trừ khi tôi đặc biệt thiết lập cấu hình của tôi như:

dataserver: 192.168.1.1:1433\SQL1 

Thiết lập giá trị port: trong cấu hình không làm gì trong trường hợp của tôi. Thật kỳ lạ khi bước này là cần thiết vì 1433 là mặc định, và không có cấu hình kết nối SQL Server nào khác của tôi cần cổng được chỉ định, nhưng thêm nó là thứ đã làm việc cho tôi trong trường hợp cụ thể này.

Bạn có thể xem tệp nhật ký FreeTDS của mình để xem xét kỹ hơn tại sao kết nối của bạn bị lỗi bằng cách chạy export TDSDUMP=/tmp/freetds.log rồi kích hoạt irb để kiểm tra kết nối của bạn với TinyTDS trong khi điều chỉnh tệp nhật ký đó.

+0

Cảm ơn bạn rất nhiều! –

Các vấn đề liên quan