2011-08-08 13 views
3

SQL Serverドライバを使用しています。しかし、これは次のエラーが私が取得さ:PERLでWindowsからMicrosoft SQL Serverにアクセス

DBI connect('Driver={SQL Server}:$database:$host','cartertest',...) failed: 
[Microsoft][ODBC Driver Manager] Invalid connection string attribute (SQL-01S00) 
at PERL_SQL_Connect.pl line 15 
Can't call method "disconnect" on an undefined value at PERL_SQL_Connect.pl line 16 

これは私のコードです:

use DBI; 
use DBD::ODBC; 
#my $dsn = "dbi:SQL Server:$database:$host"; 
my $dsn = 'DBI:ODBC:Driver={SQL Server}:$database:$host'; 

my $host = 'amber'; ##This is the server name 
my $database = 'assignmentdb';  ##This is the database name 
my $user = 'something';   ## Database User Name 
my $auth = "something"; 

#my $dsn = "dbi:SQL Server:$database:$host"; 

$dbiconnect = DBI->connect($dsn,$user,$auth); #line 15 
$dbiconnect->disconnect();      #line 16 

何間違い(s)は、私が作っていますか?

答えて

5

あなたはこの試みることができる:''文字列は、あなたの変数を補間しませんので、あなたの例では$dsn文字列がそのまま$databaseまたは$hostが含まれていることを

use DBI; 

my $host  = 'amber'; 
my $database = 'assignmentdb'; 
my $user  = 'something'; 
my $auth  = 'something'; 

my $dsn = "dbi:ODBC:Driver={SQL Server};Server=$host;Database=$database"; 
my $dbh = DBI->connect($dsn, $user, $auth, { RaiseError => 1 }); 

# .... work with the handle 

$dbh->disconnect; 

ノートではなく、その内容を。

+1

+1 - RaiseErrorは良い追加です! –

1

まず、use strictを追加し、宣言されて何かが割り当てられる前に$ databaseと$ hostを参照しているので、警告を使用してください。しかし、この場合には "代わりに"を使用していたので、strictは、4行目の問題を取り上げなかったでしょう。$ dsnの宣言の前に他の宣言を移動してください。この場合、最後にODBC接続文字列を参照してください(参考のためにDBD :: ODBC FAQを参照してください)。接続文字列にはデータベース名とホスト名を指定することはできません。 'dbi:ODBC:attr1 = value1; attr2 = value2 'ここで、属性はODBCによって部分的に定義され、ODBCドライバによって部分的に定義されています。上記の例はこれを示しています。

関連する問題