如何使用Perl连接到SQL Server?

如何使用Perl连接到SQL Server?,perl,dbi,Perl,Dbi,我有用户id、密码、数据库名称和数据源详细信息。我想用Perl连接到MSSQL服务器。我刚刚使用了下面的代码片段,但是我得到了一个错误 #!/usr/bin/perl -w use strict; use DBI; my $data_source = q/dbi:ODBC:192.168.3.137/; my $user = q/bharani/; my $password = q/123456/; # Connect to the data source and get a handle

我有用户id、密码、数据库名称和数据源详细信息。我想用Perl连接到MSSQL服务器。我刚刚使用了下面的代码片段,但是我得到了一个错误

#!/usr/bin/perl -w
use strict;

use DBI;

my $data_source = q/dbi:ODBC:192.168.3.137/;
my $user = q/bharani/;
my $password = q/123456/;

# Connect to the data source and get a handle for that connection.
my $dbh = DBI->connect($data_source, $user, $password)
    or die "Can't connect to $data_source: $DBI::errstr";
我的错误是:

DBI connect('192.168.3.137','bharani',...) failed: [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (SQL-IM002) at my sqlconnect.pl line 14
Can't connect to dbi:ODBC:192.168.3.137: [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (SQL-IM002) at mysqlconnect.pl line 14.
SQL server运行在另一个系统上,我只是尝试连接上面的详细信息。请告诉我,我应该在我的系统中增加DSN,还是在我的程序中缺少任何东西?

连接字符串中“dbi:ODBC:”后面的所有内容都将传递给ODBC驱动程序。对于MSSQL,请尝试以下连接字符串:

DBI->connect("dbi:ODBC:Driver={SQL Server};Server=192.168.3.137;UID=$user;PWD=$password")

您可以在

上找到更多的替代方案我在Ubuntu 20.04上,并按照说明在docker容器中安装SLQ服务器:

我按照教程创建了TestDB和表清单

我安装了ODBC驱动程序如下

驱动程序库文件为/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.5.so.2.1

这样,以下脚本将成功连接到数据库并返回表的内容:

 #!/usr/bin/perl
use strict;
use warnings;

use DBI;
my $user = 'SA';
my $password = '<YourNewStrong@Passw0rd>';

my $dbh = DBI->connect("dbi:ODBC:Driver={/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.5.so.2.1};Server=localhost;Database=TestDB;UID=$user;PWD=$password");

my $sth = $dbh->prepare("SELECT * FROM Inventory");
$sth->execute();

while ( my @row = $sth->fetchrow_array ) {
      print "@row\n";
}

我刚刚在本地创建了DSN,它工作了find,thx for advice,在这个站点中,我没有找到perl+mssql代码段,你只是找到了与.NET和dbi相关的内容。首先,应该是“dbi:ODBC”而不是“dbi:ODBC”。其次,在将“dbi:ODBC”传递给驱动程序(当然不是数据库)之后说所有的话并不完全正确。如果使用“dbi:ODBC:mydsn”并且不包含DRIVER=或DSN=值,那么出于历史原因,DBD::ODBC首先使用mydsn、用户名和密码调用较旧的SQLConnect API。如果将DRIVER=或DSN=放在“dbi:ODBC”后面的连接字符串中,DBD::ODBC忽略SQLConnect,并在parhaps添加UID/PWD属性后将“dbi:ODBC”后面的字符串传递给SQLDriverConnect。@bohica根据您的建议更新了答案。希望它现在更正确。