はじめに
VB.NETやC#などの言語では、データベースへアクセスするための手段が標準で備わっています。Windows PowerShellでも.NET Frameworkのクラスを利用することでデータベースへアクセスすることが可能です。
今回は、PowerShellからOracleデータベースへ接続し、データの登録、更新、削除を行う方法について説明します。
対象読者
- Windows PowerShellの基本操作が行える方。
- Oracleについて基本知識を有する方。
- 簡単なSQL文が書ける方
前回のおさらい
前回はデータセットにデータを取得しました。
このデータセットに対して、データの追加、更新、削除を行うことが可能です。このデータセットの内容はデータアダプタを使用することで、簡単にデータベースに反映させることができます。
データを取得するところまでは、前回と同じです。参考までにソースコードをリスト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のようにして作成します。
#CommandBuilderの作成 $oraCB = New-Object System.Data.OracleClient.OracleCommandBuilder($OraDa)
データセットのデータを変更する
ここまでで、変更したデータセットのデータをデータベースへ反映させる準備が整いました。次は、実際にデータを追加、更新、削除する方法について説明します。
データの追加
データセットのテーブルにデータを追加するには、最初にレコードデータを作成します。レコードデータの作成には、データを追加するデータテーブルのNewRowメソッドを使用します。
NewRowメソッドは、NewRowメソッドの実行元データテーブル(図1の$dtSet.Tables[0])と同じ構成の新規レコードが作成されます(図1)。
図1 新規レコードの作成
新規レコードを作成するにはリスト3のように記述します。
#新規レコードの作成 $dtRow = $dtSet.Tables[0].NewRow()
作成したレコードは 変数 $dtRow となります。
リスト4のようにして、この$dtRowにデータをセットします。
$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)。
$dtSet.Tables[0].Rows.Add($dtRow)
ここまでで、データセットへの変更が完了しました。
最後に、変更が完了したデータセットをデータベースに反映させます。データベースに反映させるには、データアダプタのUpdateメソッドを実行します。
[void]$oraDa.Update($dtSet)
Updateメソッドを実行すると、データセットの内容がデータベースへ反映されます(図2)。
図2 データセットの内容をデータベースに反映