как связать SQL Server с Perl - PullRequest
       36

как связать SQL Server с Perl

2 голосов
/ 23 декабря 2009

Я знаю, что есть похожий вопрос: Подключитесь к SQL Server 2005 из Perl и выполните SELECT , но я попробовал принятый ответ и не могу заставить его работать.

Предполагая, что у меня есть db с именем test, и я бы хотел сделать выбор из mytable (select id, name from mytable)

Код по ссылке выше с обновленным dsn:

use strict;
use warnings;
use DBI;

# Insert your DSN's name here.
my $dsn = 'database=test'

# Change username and password to something more meaningful
my $dbh = DBI->connect("DBI::ODBC::$dsn", 'username', 'password')

# Prepare your sql statement (perldoc DBI for much more info).
my $sth = $dbh->prepare('select id, name from mytable');

# Execute the statement.
if ($sth->execute)
{
    # This will keep returning until you run out of rows.
    while (my $row = $sth->fetchrow_hashref)
    {
        print "ID = $row->{id}, Name = $row->{name}\n";
    }
}

# Done. Close the connection.
$dbh->disconnect;

Вот что я получил при запуске скрипта: Не удается подключиться к источнику данных ODBC :: database = test, потому что я не могу понять, что используемый драйвер (кажется, он не содержит префикс dbi: driver: 'и DBI_DR IVER env var не задан) в строке script.pl 9

Похоже, проблема в DSN, но я не знаю, как это исправить (я на SQL 2005, активный Perl 5.10 и Windows XP).

Edit: Я использовал следующий код, чтобы проверить, установлен ли ODBC. использовать DBI;

print join (", ", DBI->installed_versions);

Выход: Похоже, ODBC действительно в списке.

ADO, CSV, DBM, ExampleP, File, Gofer, ODBC, SQLite, Sponge, mysql

Чего мне не хватает?

Ответы [ 3 ]

2 голосов
/ 28 апреля 2012

Я получил ту же ошибку с SQLite только сейчас, и похоже, что вы сделали то же самое, что и я. Обратите внимание на количество двоеточий в первом аргументе - это неправильный формат:

my $db = DBI->connect('DBI::SQLite::dbname=testing.db', '', '', {RaiseError => 1, AutoCommit => 1});

На самом деле в первом аргументе должно быть только две двоеточия, а не две пары двоеточий:

my $db = DBI->connect('DBI:SQLite:dbname=testing.db', '', '', {RaiseError => 1, AutoCommit => 1});

Ответ на вопрос, несмотря на его возраст, потому что он все еще на вершине результатов в Google для этого конкретного сообщения об ошибке

0 голосов
/ 17 октября 2013

Предположим, что SQL-сервер расположен на локальном сервере, соединение ниже может быть правильным:

my $DSN = "driver={SQL Server};Server=127.0.0.1;Database=test;UID=sa;PWD=123456";
my $dbh = DBI->connect("dbi:ODBC:$DSN");
0 голосов
/ 23 декабря 2009

Попробуйте настроить DSN на что-то вроде:

my $dbh = DBI->connect("dbi:ODBC:test", 'username', 'password')

Если это не сработает, убедитесь, что у вас установлен DBD :: ODBC, запустив:

perl -MDBI -e 'DBI->installed_versions;'
...