【问题标题】:Accessing Microsoft SQL Server from Windows in PERL在 PERL 中从 Windows 访问 Microsoft SQL Server
【发布时间】:2011-08-08 14:23:20
【问题描述】:

我正在使用 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

我犯了什么错误?

【问题讨论】:

    标签: sql-server perl odbc dbi


    【解决方案1】:

    你可以试试这个:

    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,而不是它们的内容。

    【讨论】:

      【解决方案2】:

      在声明和分配任何东西之前,首先添加 use strict 和 use 警告,因为您正在引用 $database 和 $host。但是,当您在这种情况下使用 ' 而不是 "时,strict 不会发现您在第 4 行遇到的问题。然后将其他声明移到 $dsn 声明之前。删除 'use DBD::ODBC' 因为它什么都不做在这种情况下。最后阅读有关 ODBC 连接字符串的信息(请参阅 DBD::ODBC 常见问题以获取参考资料)。您不能在连接字符串中放入裸数据库名称和主机。所需的字符串是 'dbi:ODBC:attr1=value1; attr2=value2' 其中属性部分由 ODBC 定义,部分由 ODBC 驱动程序定义。上面的 bvr 示例说明了这一点。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多