小池啓仁 ヒロヒト応援ブログ By はてな

小池啓仁(コイケヒロヒト)の動画など。

小池啓仁 ヒロヒト応援ブログ By はてな

PerlからSQL Serverへアクセスする

PerlからSQL Serverへアクセスするプログラムの雛形サンプルを公開します。
『カスタマイズするポイント』を参考にして、お使い下さい。お役に立てれば幸です。


補足1:
以下のサンプルソースの接続認証は、WINDOWS認証設定になっています。
SQL Server認証設定するには、WINDOWS認証設定個所をコメントにし、SQL Server認証設定個所のコメントを外します。


補足2:
データ値を求める時の$rs->{Fields}->{id}->{Value}等は、idは各項目名になり、FieldsとValueは固定です。

# SQL Server のデータベースアクセスサンプル
#[カスタマイズするポイント]
#・SQL Serverのサーバー名を『localhost』を変更する。
#・DB名『test』を変更する。
#・テーブル名『test_table』を変更する。
#・項目名『idやname』を変更する。
#・SQL Server 認証設定の時のID『testid』を変更する。
#・SQL Server 認証設定の時のパスワード『testps』を変更する。

use strict;
use Win32::OLE;

# DBサーバー名とDB名設定
my $server = "localhost";
my $db = "test";

# WINDOWS 認証設定
my $connStr = "Provider=sqloledb;".
              "Data Source=$server;".
              "Initial Catalog=$db;".
              "Integrated Security=SSPI;";

# SQL Server 認証設定
#my $id = "testid";
#my $ps = "testps";
#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'";

# テーブル作成
$objDB->Execute(
    "Create Table test_table (id int, name Char(20))" );

# データ挿入
$objDB->Execute(
    "Insert into test_table  values (1,'ミスチル')");
$objDB->Execute(
    "Insert into test_table  values (2,'中島美華')");
$objDB->Execute(
    "Insert into test_table  values (3,'中島美華')");

# データ更新
$objDB->Execute(
    "Update test_table Set name = '中島美嘉' Where id = 2");

# データ削除
$objDB->Execute(
    "Delete From test_table Where id = 3");

# データ読み出し
my $rs = Win32::OLE->new("ADODB.Recordset");
$rs->Open("select * from test_table", $objDB);
while(!$rs->EOF and $rs->{RecordCount} != 0){
    print "$rs->{Fields}->{id}->{Value}, ",
          "$rs->{Fields}->{name}->{Value}\n";
    $rs->MoveNext();
}
$rs->Close();

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

参考:
本サンプルは、以下のページを大変参考にさせて頂きました。
http://www.augustus.to/blog/3128/archives/000046.html