2011-08-08 40 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

你可以试试这个:

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; 

注意''字符串不插你的变量,所以在你的例子$dsn字符串包含逐字$database$host,而不是它们的内容。

+1

+1 - RaiseError是一个很好的补充! –

1

首先添加使用严格和使用警告,因为您正在引用$ database和$ host之前它们被声明和分配任何东西。但是,在这种情况下,如果使用“而不是”严格的话,就不会在第4行找到问题。然后在声明$ dsn之前移动其他声明。删除'use DBD :: ODBC',因为它什么也不做在这种情况下,最后读到关于ODBC连接字符串的信息(请参阅DBD :: ODBC常见问题解答中的参考资料),您不能在连接字符串中放置一个裸数据库名称和主机。 attr2 = value2'其中属性部分由ODBC部分定义,部分由ODBC驱动程序定义。bvr上面的示例显示:

相关问题