2013-07-10 383 views
0

自從昨天以來,我一直試圖連接到Perl中的SQL Server數據庫,這是一個失敗。我使用DBI->connect函數,但我得到錯誤說沒有找到數據源和驅動程序。我使用該字符串:連接到SQL Server數據庫

'dbi:ODBC:mydb:myhost\myinstance' 

我不太確定字符串是否正確。任何想法?

編輯:這是我得到的錯誤:

DBI connect('***:***\***','',...) failed: [Microsoft][ODBC Driver 
Manager] Data source name not found and no default driver specified (SQL-IM002) 
at Collector.pl line 137 

回答

0

嗯,這似乎工作正常,

use DBI; 
# 
$dbh = DBI->connect("dbi:mysql:DBNAME", "root", "password") 
    or die "Connection Error $DBI::errstr\n"; 

注:請檢查您是否安裝了所需的模塊。

+0

我更新了帖子。 – phaazon

3

用於ODBC的DBI連接字符串的格式是'dbi:ODBC:DSN_name'或'dbi:ODBC:DSN = DSN_name'(用於使用數據源名稱(DSN)的連接),在這種情況下,DSN_name必須是使用ODBC管理員創建的數據源的名稱在Windows 64位環境中,這種情況稍微複雜一些,因爲有2個ODBC管理員,一個用於32位應用程序,另一個用於64位應用程序(不能混用這兩種應用程序)

因此,首先,如果你的Perl是32位或64位可執行文件,你就可以看出來 - 通常你可以從perl -V的輸出中看到這個(尋找archname,但也有其他的跡象)然後找到合適的ODBC Administrator這取決於你的perl是如何構建的,並用它創建數據源。最後,更改你的DBI連接如上所述。

還有一些所謂的無DSN連接,不需要DSN,而是命名DRIVER和連接到數據庫所需的任何屬性。

如果您使用'dbi:ODBC:DSN_name'而不是'dbi:ODBC:DSN = DSN_name',您可以閱讀關於ODBC - The Connection Process的DBD :: ODBC,

你可以找到更多關於32/64位ODBC和在哪裏找到正確的驅動程序管理器在64 bit ODBC。您可以在Drivers, Data Sources and Connection - Perl DBI/DBD::ODBC Tutorial Part 1找到關於DBD :: ODBC和連接的信息。

+0

DBI-> data_sources('ODBC')似乎返回一個空數組... – phaazon

+0

那麼你有任何數據源?查看ODBC驅動程序管理器,查看是否有定義。 – bohica

+0

問題是我正在爲生產服務器編寫一個Perl腳本(很多)。我打算弄清楚,然後我會回來 – phaazon