[英]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.