2009-12-23 4 views
2

Я знаю, что есть аналогичный вопрос: Connect to SQL Server 2005 from Perl and do a SELECT, но я пробовал принятый ответ и не могу заставить его работать.Как подключиться к SQL Server с perl

Предполагая, что у меня есть тест БД с именем, и хотел бы, чтобы сделать выбор из туЬаЫе (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).

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

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

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

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

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

+0

У вас установлен DBD :: ODBC? – mopoke

+0

Да, у меня есть DBD :: ODBC instaleld. Проверенные. –

+0

Любые предложения? –

ответ

0

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

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

Если это не работает, убедитесь, что вы DBD :: ODBC установлен командой:

perl -MDBI -e 'DBI->installed_versions;' 
+0

Я пробовал ваше решение и не работает, ODBC находится в списке при запуске кода. Так как я не могу отправить код здесь, пожалуйста, посмотрите мой код в ответе. –

+0

Не удается подключиться к источнику данных «ODBC :: test», потому что я не могу решить, какой драйвер t o использовать (он, кажется, не содержит префикса 'dbi: driver:' и DBI_DRIVER env var is не установлен) на script.pl строка 6 –

+0

Выше того, что я получил после применения вашего кода. –

2

Я получил ту же ошибку с 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

Предположим, что SQL-сервер находится на локальном сервере, con Ниже приведено право ниже:

my $DSN = "driver={SQL Server};Server=127.0.0.1;Database=test;UID=sa;PWD=123456"; 
my $dbh = DBI->connect("dbi:ODBC:$DSN"); 
Смежные вопросы