我正在使用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
我犯了什么错误?
答案 0 :(得分: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)
首先添加use strict并使用警告,因为在声明和分配任何内容之前引用$ database和$ host。但是,正如你在这种情况下使用'而不是'一样,strict不会在第4行找到你遇到的问题。然后在声明$ dsn之前移动其他声明。删除'use DBD :: ODBC',因为它什么都不做在这种情况下。最后阅读有关ODBC连接字符串的内容(请参阅DBD :: ODBC FAQ以获取引用)。您不能在连接字符串中放置一个裸数据库名称和主机。所需的字符串是'dbi:ODBC:attr1 = value1; attr2 = value2'其中属性部分由ODBC定义,部分由ODBC驱动程序定义.bvr上面的示例显示了。