2011-02-05 17 views
10

Tengo una identificación de usuario, una contraseña, el nombre de la base de datos y los datos del recurso. Quiero conectarme con Perl a un servidor MSSQL. Acabo de usar el siguiente fragmento, pero me aparece un error.¿Cómo me conecto con Perl a 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"; 

Mi error es:

servidor
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. 

El SQL se ejecuta en otro sistema, sólo estoy tratando de conectar con los detalles anteriores. Dígame, ¿debo aumentar DSN en mi sistema, o falta algo en mi programa?

Respuesta

17

Todo lo que sigue a 'dbi:ODBC:' en su cadena de conexión se pasa al controlador ODBC. Para MSSQL, prueba esta cadena de conexión:

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

se pueden encontrar algunos más alternativas en connectionstrings.com

+0

acabo de crear el DSN en mi local y funcionó encontrar, THX para asesorar, en este sitio no pm Buscar perl + mssql snippet, ya lo acabo de encontrar relacionado con .NET Y db – Bharanikumar

+1

En primer lugar, debería ser 'dbi: ODBC' no 'DBI: ODBC'. En segundo lugar, no es exactamente correcto decir todo después de que 'dbi: ODBC' se transfiere al controlador y ciertamente no a la base de datos. Si usa 'dbi: ODBC: mydsn' y ​​no incluye un DRIVER = o DSN = entonces DBD :: ODBC llama primero a la antigua API de SQLConnect con mydsn, nombre de usuario, contraseña (por razones históricas). Si pone DRIVER = o DSN = en la cadena de conexión después de 'dbi: ODBC' DBD :: ODBC ignora SQLConnect y pasa la cadena después de 'dbi: ODBC' a SQLDriverConnect luego de haber agregado los atributos de UID/PWD. – bohica

+0

@bohica Actualizó la respuesta según sus sugerencias. Espero que sea más correcto ahora. – bvr

Cuestiones relacionadas