こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

Perl MSSQLに接続してSQLのVer情報を

すみません。素人です。
Perl MSSQLに接続してSQLのバージョン情報を取得したいです。
コードを実行すると下のようなエラーが発生します。
Can't use string ("1") as a HASH ref while "strict refs" in use at C:\testPerl\test.pl

SQLServer Mangement Studioでクエリー(select @@VERSION)を実行すると下のような情報を取得できます。
********
(列名なし)
Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86) Jul 9 2008 14:43:34 Copyright (c) 1988-2008 Microsoft Corporation Workgroup Edition on Windows NT 6.1 <X86> (Build 7601: Service Pack 1)
*********
どうも取得したデータ構造の指定がまずいように思いますが、どうすれば取得できますでしょうか?

コード
-------------------
use strict;
use warnings;
use Data::Dumper;
use Win32::OLE;

use Data::Dumper::Concise;
use Win32::OLE::variant;
use Win32::OLE::Const 'Microsoft ActiveX Data Objects 2.0 Library';

# DBサーバー名とDB名設定
my $server = "localhost";
my $db = "";
my $id = "sa";
my $ps = "testSa";

# エラー時に本処理を中止し、Perlがエラーメッセージを出力し、本プロセスが終了する。
Win32::OLE->Option(Warn => 3);

# SQL Server 認証設定

my $connStr = "Provider=sqloledb;".
"Data Source=$server;".
"Initial Catalog=$db;".
"User ID=$id;".
"Password=$ps;";

# DB接続
my $objDB = Win32::OLE->new("ADODB.Connection");
$objDB->Open($connStr);

$objDB->{Errors}->{Count} and die "cannot connect '$connStr'";

my $rs = Win32::OLE->new("ADODB.Recordset");
$rs->Open("select \@\@VERSION", $objDB);
print "取りあえずなんか出力しようと試みる----------1\n";
print "$rs->{Fields}"."\n";
print "$rs->{Fields}->{Count}"."\n";
print "$rs->{Fields}->{Count}->{Item}->{1}"."\n";

while(!$rs->EOF ){
print "$rs->{Fields}->{Count}->{Value}"."$rs->{Fields}->{Item}->{Value}\n";
$rs->MoveNext();
}
print "取りあえずなんか出力しようと試みる----------1\n";

## DB切断
$objDB->Close();

投稿日時 - 2017-10-06 11:57:34

QNo.9382722

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

Perlのことはよく知りませんが、

select @@version as v

というように、列名をvと名前をつければ、通常のSQLと同じように取得ができるかと思います。

投稿日時 - 2017-10-06 14:43:04