perl,DBI,MS SQL和预处理语句

时间:2016-08-30 17:43:13

标签: sql-server perl dbi

我在RedHat盒子上有Perl,DBI和linux ODBC驱动程序。我正在尝试连接到MS SQL数据库。我认为ODBC设置是正确的。当我决定确保连接真正起作用并且只是做一个简单的查询时,我正要问一个不同的问题。

...
my @connection_MSSQL = (
    "DBI:ODBC:DSN=msdb.my.company.com",
    'notARealUser',
    'notAPassword',
    {   PrintError => 0,
        RaiseError => 1,
        AutoCommit => 1
    }
);

my $MSdbh = DBI->connect_cached(@connection_MSSQL)
    or die __LINE__ . ": $<: " . DBI::errstr . "\n";

$MSdbh->trace(2);
my $msTest = $MSdbh->prepare('SELECT SYSDATETIME()');
$msTest->execute();
my $msTestVal = "";
$msTest->bind_col(1, \$msTestVal);
print STDERR "msTestVal=$msTestVal\n";
$MSdbh->trace(0);
...

使用trace结果

DBI::db=HASH(0xf405818) trace level set to 0x0/2 (DBI @ 0x0/0) in DBI 1.634-ithread (pid 3974)
-> prepare for DBD::ODBC::db (DBI::db=HASH(0xf4058c0)~0xf405818 'SELECT SYSDATETIME()') thr#e7da010
<- prepare= ( DBI::st=HASH(0xf405bf0) ) [1 items] at script.pl line 133
-> execute for DBD::ODBC::st (DBI::st=HASH(0xf405bf0)~0xf405ba8) thr#e7da010
<- execute= ( -1 ) [1 items] at script.pl line 134
-> bind_col for DBD::ODBC::st (DBI::st=HASH(0xf405bf0)~0xf405ba8 1 SCALAR(0xf11ff88)) thr#e7da010
<- bind_col= ( 1 ) [1 items] at script.pl line 136
msTestVal=
-> trace in DBD::_::common for DBD::ODBC::db (DBI::db=HASH(0xf4058c0)~0xf405818 0) thr#e7da010
<- trace= ( 2 ) [1 items] at script.pl line 138
-> DESTROY for DBD::ODBC::st (DBI::st=HASH(0xf405ba8)~INNER) thr#e7da010
<- DESTROY= ( undef ) [1 items] at script.pl line 365

似乎连接正在起作用......或者不是在禁止。它看起来像prepareexecutebind_col所有“工作”,但我没有看到绑定到结果变量的结果。

在这种情况下,我要求系统日期时间值。我也尝试选择一个静态字符串值,la:SELECT 'asdf'具有相同的结果。没有报告错误。

想法?

0 个答案:

没有答案