如何使用 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 中的值,然后从那里开始
我目前在我的 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 中的值,然后从那里开始