Доступ к Microsoft SQL Server из Windows в PERL - PullRequest
3 голосов
/ 08 августа 2011

Я использую драйвер SQL Server.Но я получаю следующую ошибку:

DBI connect('Driver={SQL Server}:$database:$host','cartertest',...) failed:
[Microsoft][ODBC Driver Manager] Invalid connection string attribute (SQL-01S00)
at PERL_SQL_Connect.pl line 15
Can't call method "disconnect" on an undefined value at PERL_SQL_Connect.pl line 16

Это мой код:

use DBI;
use DBD::ODBC;
#my $dsn = "dbi:SQL Server:$database:$host";
my $dsn = 'DBI:ODBC:Driver={SQL Server}:$database:$host';

my $host = 'amber';    ##This is the server name
my $database = 'assignmentdb';     ##This is the database name
my $user = 'something';         ## Database User Name
my $auth = "something";

#my $dsn = "dbi:SQL Server:$database:$host";

$dbiconnect = DBI->connect($dsn,$user,$auth);   #line 15
$dbiconnect->disconnect();                      #line 16

Какую ошибку я делаю?

Ответы [ 2 ]

5 голосов
/ 08 августа 2011

Вы можете попробовать это:

use DBI;

my $host     = 'amber';
my $database = 'assignmentdb';
my $user     = 'something';
my $auth     = 'something';

my $dsn = "dbi:ODBC:Driver={SQL Server};Server=$host;Database=$database";
my $dbh = DBI->connect($dsn, $user, $auth, { RaiseError => 1 });

# .... work with the handle

$dbh->disconnect;

Обратите внимание, что строка '' не интерполирует ваши переменные, поэтому в вашем примере строка $dsn содержит дословно $database или $host, а не их содержимое.

1 голос
/ 08 августа 2011

Во-первых, добавьте use warn и use warnings, поскольку вы ссылаетесь на $ database и $ host, прежде чем они будут объявлены и назначены что-либо. Однако, так как вы использовали «вместо» в этом случае, строгий не обнаружил бы проблему, которая возникла в строке 4. Затем переместите другие объявления перед объявлением $ dsn. Удалите «use DBD :: ODBC», поскольку он ничего не делает в этом случае. Наконец, прочитайте о строках соединения ODBC (см. справку DBD :: ODBC для справок.) Вы не можете указать пустое имя базы данных и хост в строке соединения. Требуемая строка: 'dbi: ODBC: attr1 = value1; attr2 = value2 ', где атрибуты частично определены ODBC и частично драйвером ODBC. Приведенный выше пример bvr показывает, что.

...