2009-12-23 87 views
2

我知道有一個類似的問題:Connect to SQL Server 2005 from Perl and do a SELECT,但我試過接受的答案,我無法讓它工作。如何連接SQL Server與Perl

假設我有一個數據庫名爲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)。

編輯: 我使用下面的代碼來驗證是否安裝了ODBC。 使用DBI;

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

輸出: 看起來ODBC確實在列表中。

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

我錯過了什麼?

+0

您是否安裝了DBD :: ODBC? – mopoke 2009-12-23 00:46:40

+0

是的,我有DBD :: ODBC instaleld。驗證。 – 2009-12-23 17:23:30

+0

有什麼建議嗎? – 2009-12-23 22:05:56

回答

0

嘗試喜歡你的DSN設置的東西:

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

如果不工作,請確保您已通過運行安裝DBD :: ODBC:

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

我試過你的解決方案並且不起作用,ODBC在運行代碼時在列表中。 由於我無法在此處發佈代碼,請在答案中查看我的代碼。 – 2009-12-23 17:29:06

+0

無法連接到數據源'ODBC :: test',因爲我無法計算出驅動程序使用哪個驅動程序(它似乎不包含'dbi:driver:'前綴,而DBI_DRIVER env var是沒有設置)在script.pl第6行 – 2009-12-23 17:37:49

+0

以上是我應用您的代碼後得到的。 – 2009-12-23 17:38:23

2

我得到了同樣的錯誤SQLite剛纔,看起來你做了和我一樣的錯誤。請注意,在第一個參數冒號的數量 - 這是錯誤的格式:

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

有實際上應該只有兩個冒號,沒有2對冒號的第一個參數:

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

問題儘管它的年齡回答,因爲它是仍然頂在谷歌的結果此特定錯誤消息

0

假設SQL服務器位於本地服務器,CON nection可以是正確的:

my $DSN = "driver={SQL Server};Server=127.0.0.1;Database=test;UID=sa;PWD=123456"; 
my $dbh = DBI->connect("dbi:ODBC:$DSN");