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

Perl初心者のためのPerlノートです!

HTML/ CSS/ CGI-Perl/ JavaScript/ JavaApplet/ AccessUp/ Internet/ EnglishLearn/ ちゃいちゃん天使/ 天使メッセージ/ 飯田ワールド/ 結城ワールド/ プロフィール/ WEB相談室/ WEBアンテナ/ WEBリーダー/ 燈明日記/ yahoo

◆ はじめに

本ページは、私がPerlを習得した時(いや習得中)のノートです。

ごく普通の言語(COBOL,C,Java,VB等)を知っている人が、Perlをやり始めるといろいろと悩むことがあります。

それは、

です。

本ページは、そのようなハードルを一つ一つクリアにしていけたらと思います。

そして、本ページが何かのお役に立てれば幸いです。では、ごゆっくりご覧ください。

尚、ご感想、ご意見、誤字、脱字、間違い等がありましたら遠慮なくPerlノート掲示板へご指摘ください。

◆ サイト最新情報

◆ コンテンツ

■ 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』を変更する。
# 補足:
# データ値を求める時の$rs->{Fields}->{id}->{Value}等は、idは各項目名になり、FieldsとValueは固定です。

use strict;
use Win32::OLE;

# datetime型のデータが文字列で取得できる。
use Win32::OLE::variant;

# 指定タイプライブラリのコンスタントが参照可能
use Win32::OLE::Const 'Microsoft ActiveX Data Objects 2.0 Library';

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

# 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'";

# テーブル有無チェック
my $rs = Win32::OLE->new("ADODB.Recordset");
$rs->Open("Select count(*) aru From sysobjects Where NAME = 'test_table'", $objDB);

# テーブル無しの場合、テーブル作成
if ($rs->{aru}->{Value} == 0) {
    $objDB->Execute(
        "Create Table test_table (id int, name Char(20))" );
}
$rs->Close();

# データ挿入
$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");

# データ読み出し
$rs = Win32::OLE->new("ADODB.Recordset");
$rs->{CursorLocation} = adUseClient;
$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();

◆ おすすめ Perl本

■ 続・初めてのPerl 改訂版

『初めてのPerl』の次ぎに読むと吉です。

結構いいですが・・・、初心者にはちょっと難しいかもです。

■ 結城浩のPerlクイズ

この本には、ちゃいちゃんパパの小話しが載っています(謎)。

ある程度、Perlを理解している人には、たまらない内容になっています。さすが結城先生だな!

結城浩のPerlクイズ

■ 新版Perl言語プログラミングレッスン入門編

実は、私はまだ読んでいませんが、結城先生の本なので良くないはずがありません。

新版Perl言語プログラミングレッスン入門編

■ CGI&Perlポケットリファレンス (Pocket reference)

この本は、非常に役に立ちます。ちょっと調べるのに最適です。サンプルも説明も的を射ています。

CGI&Perlポケットリファレンス (Pocket reference)

■ Perlベストプラクティス

一読の価値有りだと思います。

Perlベストプラクティス

■ プログラミングPerl〈VOLUME1〉

ご存知、Perl本の聖書、ラクダ本(上)です。

■ プログラミングPerl〈VOLUME2〉

ご存知、Perl本の聖書、ラクダ本(下)です。

◆ おわりに

最後に、本ページが、何かのお役に立てれば幸いです。

尚、ご感想、ご意見、誤字、脱字、間違い等がありましたら遠慮なくPerlノート掲示板へご指摘ください。

HTML/ CSS/ CGI-Perl/ JavaScript/ JavaApplet/ AccessUp/ Internet/ EnglishLearn/ ちゃいちゃん天使/ 天使メッセージ/ 飯田ワールド/ 結城ワールド/ プロフィール/ WEB相談室/ WEBアンテナ/ WEBリーダー/ 燈明日記/ yahoo

人のよいところをどんどん見つけよう