簡體   English   中英

使用DBI使用Perl連接到SQL Server嗎?

[英]Connecting to SQL Server using Perl using DBI?

我正在嘗試使用Perl DBI模塊連接到SQL Server,我已經嘗試了所有連接字符串格式,但Perl仍然拋出無效的連接字符串錯誤。

我已經嘗試過Perl僧侶網站上提供的代碼段。

#!/usr/bin/perl -w
use strict;
use DBI;

# Set up variables for the connection
my $server_name = '00.120.124.1;3181';

my $database_name = 'abcd';
my $database_user = 'kkkk';
my $database_pass = 'password';

my $DSN = 'driver={SQL Server};server=$server_name;da
+tabase=$database_name;uid=$database_user;pwd=$database_pass;'; 
my $dbh = DBI->connect("DBI:ODBC:$DSN") || die "Couldn't open database
+: $DBI::errstr\n";

預期結果是連接到數據庫。

失敗:[Microsoft] [ODBC SQL Server驅動程序] [DBNETLIB] SQL Server不存在或訪問被拒絕。 [Microsoft] [ODBC SQL Server驅動程序] [DBNETLIB] ConnectionOpen(Connect())。 (SQL-01000)[狀態現在是01000 01S00] [Microsoft] [ODBC SQL Server驅動程序] perl.pl第16行處的連接字符串屬性(SQL-01S00)無效。無法打開數據庫+:[Microsoft] [ODBC SQL服務器驅動程序] [DBNETLIB] SQL Server不存在或訪問被拒絕。 (SQL-08001)[狀態現在為08001 01000]無效的連接字符串屬性(SQL-01S00)

您帖子中以+開頭的行

+tabase=$database_name;uid=$database_user;pwd=$database_pass;'; 

+: $DBI::errstr\n";

從perlmonks.org中被錯誤地復制和粘貼。 前導+符號是一種約定,表示將長行分開。 您應該刪除+並將該行連接到上一行,這樣您的代碼才能讀取

my $DSN = 'driver={SQL Server};server=$server_name;database=$database_name;uid=$database_user;pwd=$database_pass;'; 
my $dbh = DBI->connect("DBI:ODBC:$DSN") || die "Couldn't open database: $DBI::errstr\n";

您的錯誤消息包含以下內容:

SQL Server不存在或訪問被拒絕

您的設置代碼包含以下內容:

 my $server_name = '00.120.124.1;3181'; 

'00 .120.124.1; 3181'不是有效的服務器名稱或IP地址。 您應該更正IP地址部分(不能以'00'開頭),並將端口移到一個單獨的參數中。

您還將用戶名和密碼作為DSN的一部分。 我不知道DBD :: ODBC是否支持該用法( 文檔中未提到),但是將它們作為connect()調用的單獨參數更為傳統。

總而言之,我想您需要更多類似這樣的東西:

my $server_name = '00.120.124.1'; # But this needs to be corrected
my $server_port = 3181;

my $database_name = 'abcd';
my $database_user = 'kkkk';
my $database_pass = 'password';

my $DSN = "driver={SQL Server};server=$server_name;port=$server_port;database=$database_name"; 

my $dbh = DBI->connect("DBI:ODBC:$DSN", $database_user, $database_pass)
  || die "Couldn't open database: $DBI::errstr\n";

還要注意,我將用於創建$DSN變量的引號字符從單引號更改為雙引號。 變量不會在符號引號中擴展,因此您沒有在DSN中獲得$server_name等的值。

更好的連接方法是使用DBD :: Sybase模塊。 該名稱不建議使用,但SQL Server從Sybase繼承。 這樣就可以避免ODBC。 http://metacpan.org/pod/DBD::Sybase#Using-DBD::Sybase-with-MS-SQL

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM