2011-02-05 24 views
10

Tôi có một id người dùng, mật khẩu, tên cơ sở dữ liệu và chi tiết nguồn dữ liệu. Tôi muốn kết nối với Perl đến một máy chủ MSSQL. Tôi chỉ sử dụng đoạn mã sau đây, nhưng tôi nhận được một lỗi.Làm cách nào để kết nối với Perl với SQL Server?

#!/usr/bin/perl -w 
use strict; 

use DBI; 

my $data_source = q/dbi:ODBC:192.168.3.137/; 
my $user = q/bharani/; 
my $password = q/123456/; 

# Connect to the data source and get a handle for that connection. 
my $dbh = DBI->connect($data_source, $user, $password) 
    or die "Can't connect to $data_source: $DBI::errstr"; 

lỗi của tôi là:

DBI connect('192.168.3.137','bharani',...) failed: [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (SQL-IM002) at my sqlconnect.pl line 14 
Can't connect to dbi:ODBC:192.168.3.137: [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (SQL-IM002) at mysqlconnect.pl line 14. 

Các SQL server chạy trên một hệ thống khác, tôi chỉ cố gắng để kết nối với các chi tiết trên. Vui lòng cho tôi biết, tôi có nên giảm DSN trong hệ thống của mình hay không hoặc bất kỳ thứ gì bị thiếu trong chương trình của tôi?

Trả lời

17

Mọi thứ sau 'dbi:ODBC:' trong chuỗi kết nối của bạn được chuyển tới trình điều khiển ODBC. Đối với MSSQL, hãy thử chuỗi kết nối này:

DBI->connect("dbi:ODBC:Driver={SQL Server};Server=192.168.3.137;UID=$user;PWD=$password") 

Bạn có thể tìm thấy một số lựa chọn thay thế thêm về connectionstrings.com

+0

tôi vừa tạo DSN trong địa phương của tôi, và nó làm việc tìm kiếm, thx cho lời khuyên, trong trang web này đang không tìm thấy perl + mssql snippet, ya chỉ tìm thấy liên quan đến .NET AND db – Bharanikumar

+1

Trước hết phải là 'dbi: ODBC' không 'DBI: ODBC'. Thứ hai nó không phải là chính xác để nói tất cả mọi thứ sau khi 'dbi: ODBC' được truyền cho người lái xe và chắc chắn không phải là cơ sở dữ liệu. Nếu bạn sử dụng 'dbi: ODBC: mydsn' và không bao gồm DRIVER = hoặc DSN = thì DBD :: ODBC trước tiên gọi API SQLConnect cũ hơn với mydsn, tên người dùng, mật khẩu (vì lý do lịch sử). Nếu bạn đặt DRIVER = hoặc DSN = trong chuỗi kết nối sau 'dbi: ODBC' DBD :: ODBC bỏ qua SQLConnect và chuyển chuỗi sau 'dbi: ODBC' sang SQLDriverConnect sau khi thêm vào các thuộc tính UID/PWD. – bohica

+0

@bohica Đã cập nhật câu trả lời theo đề xuất của bạn. Hy vọng nó là chính xác hơn bây giờ. – bvr

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