我目前使用以下代码连接到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';
知道为什么这不起作用吗?
答案 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中的值并从那里开始