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

How can I specify the port number with DBD::ODBC?

我目前在我的 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 not found" 错误:

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

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

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

dbi:ODBC:DSN=MYDATABASE

或者您可以将其缩写为

dbi:ODBC:MYDATABASE

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

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

猜测,我会说你可能会写

dbi:ODBC:DSN=MYDATABASE;Port=40450

但我不能确定,我也没有办法测试

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

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

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

您应该首先检查 MYDATABASE DSN 中的值,然后从那里开始