Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

Windows PowerShell 活用編(12)
Oracleデータベースの操作2

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加
2009/07/10 14:00

 前回に引き続きPowerShellからOracleデータベースを操作する方法について説明します。今回はデータの追加・更新・削除ついてです。

目次

はじめに

 VB.NETやC#などの言語では、データベースへアクセスするための手段が標準で備わっています。Windows PowerShellでも.NET Frameworkのクラスを利用することでデータベースへアクセスすることが可能です。

 今回は、PowerShellからOracleデータベースへ接続し、データの登録、更新、削除を行う方法について説明します。

対象読者

  • Windows PowerShellの基本操作が行える方。
  • Oracleについて基本知識を有する方。
  • 簡単なSQL文が書ける方

前回のおさらい

 前回はデータセットにデータを取得しました。

 このデータセットに対して、データの追加、更新、削除を行うことが可能です。このデータセットの内容はデータアダプタを使用することで、簡単にデータベースに反映させることができます。

 データを取得するところまでは、前回と同じです。参考までにソースコードをリスト1に示します。それぞれのコードの意味については前回の記事を参照してください。

リスト1
#Assemblyのロード
[void][reflection.assembly]::LoadWithPartialName("System.Data.OracleClient")

$ConnectionString = "Data Source=MyServer;User ID=scott;Password=tiger;Integrated Security=false;"
#Assemblyのロード
[void][reflection.assembly]::LoadWithPartialName("System.Data.OracleClient")

$ConnectionString = "Data Source=icpsd01;User ID=scott;Password=tiger;Integrated Security=false;"

#接続の作成
$OraConn = New-Object System.Data.OracleClient.OracleConnection($ConnectionString)

#データセットの作成
$dtSet = New-Object System.Data.DataSet

#Select文の作成
$strSQL = "SELECT * FROM EMP"
$oraDa = New-Object System.Data.OracleClient.OracleDataAdapter($strSQL, $OraConn)

[void]$oraDa.Fill($dtSet)

OracleCommandBuilderを作成する

 これまでの説明ではデータの取得にデータアダプタを使用してきました。このデータアダプタを使用してデータの追加、更新、削除を行うには OracleCommandBuilderクラスと組み合わせて使用します。OracleCommandBuilderを使用することで、データセットの変更を反映するSQLステートメントを自動的に生成することができます。

 OracleCommandBuilderはリスト2のようにして作成します。

リスト2
#CommandBuilderの作成
$oraCB = New-Object System.Data.OracleClient.OracleCommandBuilder($OraDa)

データセットのデータを変更する 

 ここまでで、変更したデータセットのデータをデータベースへ反映させる準備が整いました。次は、実際にデータを追加、更新、削除する方法について説明します。

データの追加

 データセットのテーブルにデータを追加するには、最初にレコードデータを作成します。レコードデータの作成には、データを追加するデータテーブルのNewRowメソッドを使用します。

 NewRowメソッドは、NewRowメソッドの実行元データテーブル(図1の$dtSet.Tables[0])と同じ構成の新規レコードが作成されます(図1)。

図1 新規レコードの作成

 新規レコードを作成するにはリスト3のように記述します。

リスト3
#新規レコードの作成
$dtRow = $dtSet.Tables[0].NewRow()

 作成したレコードは 変数 $dtRow となります。

 リスト4のようにして、この$dtRowにデータをセットします。

リスト4
$dtRow["EMPNO"] = 1234;
$dtRow["ENAME"] = "HIRO";
$dtRow["JOB"] = "SALESMAN";
$dtRow["MGR"] = 7698;
$dtRow["HIREDATE"] = Get-Date -Year 2009 -Month 4 -Day 1
$dtRow["SAL"] = 2000;
$dtRow["DEPTNO"] = 30;

 $dtRowの角括弧の中にはフィールド名を2重引用符で括って指定します。

 次に、テーブルのレコード(Rows)が持つAddメソッドを実行して、作成したレコードをデータセットのテーブルに追加します(リスト5)。

リスト5
$dtSet.Tables[0].Rows.Add($dtRow)

 ここまでで、データセットへの変更が完了しました。

 最後に、変更が完了したデータセットをデータベースに反映させます。データベースに反映させるには、データアダプタのUpdateメソッドを実行します。

リスト6
[void]$oraDa.Update($dtSet)

 Updateメソッドを実行すると、データセットの内容がデータベースへ反映されます(図2)。

図2 データセットの内容をデータベースに反映


  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • HIRO(ヒロ)

    HIRO's.NETのHIROです。 とある半導体工場のSEです。 VB.NET, C#, PowerShellによるプログラミングを楽しんでいます。 最近はBlog でPowerShellについて書いています。 2008/07/07にPowerShell from Japan!!という...

バックナンバー

連載:Windows PowerShell 活用編

もっと読む

All contents copyright © 2005-2019 Shoeisha Co., Ltd. All rights reserved. ver.1.5