如何使用DBD :: ODBC指定端口号?

时间:2016-09-26 16:06:15

标签: perl odbc dsn

我目前使用以下代码连接到Perl脚本中的数据库:

my $dsn = 'dbi:ODBC:MYDATABASE';
my $database = 'uat_env';
my $user = 'user';
my $auth = 'password';

my $dbh = DBI->connect($dsn, $user, $auth, {
    RaiseError => 1,
    AutoCommit => 1
}) or die("Couldn't connect to database");

$dbh->do('use '.$database);

现在端口已从1433更改为40450。

我无法更改DSN中的端口。我认为这种改变会起作用,但我收到了一个未找到的DSN"错误:

my $dsn = 'dbi:ODBC:MYDATABASE;Port=40450';

知道为什么这不起作用吗?

1 个答案:

答案 0 :(得分:3)

ODBC的DBI数据源字符串有两种格式。你可以说

dbi:ODBC:DSN=MYDATABASE

或者您可以将其缩写为

dbi:ODBC:MYDATABASE

这就是你拥有的。如果您使用 DSN,则无法再添加任何参数,因此dbi:ODBC:MYDATABASE;Port=40450正在寻找显然不存在的DSN MYDATABASE;Port=40450 < / p>

执行此操作的正确方法是设置一个新的DSN,其中包含MYDATABASE的所有参数的副本,但具有不同的端口名称

guess ,我会说你可以写

dbi:ODBC:DSN=MYDATABASE;Port=40450

但我无法确定,我无法测试

如果您的要求很简单,那么您可以提供所有参数而不是DSN,例如

dbi:ODBC:Driver={SQL Server};Server=11.22.33.44;Port=40450

但如果您没有使用SQL Server ODBC连接,则必须提供正确的驱动程序,并且可能需要其他参数

您应首先检查MYDATABASE DSN中的值并从那里开始