HIRO's.NET

VB.NET, C#, PowerShell Tipsサイト

 VB.NET, C#, PowerShellを使用しているエンジニアのためのサイト。

 基本的な使用方法から開発で役立つTipsまで幅広く取り扱っています。

HIRO's.NET RSSHIRO's.NET RSS


PowerShellの開発でお困りのことはありませんか?
そんな悩みは当サイトで解決!!

HOME > PowerShell Tips > 自作関数 Tips メニュー

07.Oracleデータベースからデータを取得してXMLへ保存する GUI版

 
UPDATE:2008/05/02    
 




Oracleデータベースからデータを取得してXMLへ保存するでOracleデータベースからデータを取得し、XMLファイルへ保存する関数を紹介しました。
今回は、これを改善し、
・取得したデータをWinodwsフォームのDataGridViewへの表示
・[XMLへ保存]ボタンが押されたら、ファイル保存ダイアログを表示し、任意の名前を付けて保存
ができるようにしてみました。

Export-OracleDataXml2.ps1

#===============================================================================
# Export-OracleDataXml2: データを取得してXMLファイルへ保存する(Oracle)
#
# 使用例
# PS > Export-OracleDataXml
# PS > DataSource: データソース名
# PS > User ID: ユーザーID
# PS > Password: パスワード
# PS > Query String: クエリ文字列
#
# copyright HIRO's.NET(http://hiros-dot.net.com/)
#===============================================================================
function global:Export-OracleDataXml2
{
#===== 必要情報をユーザーから取得する =====
$DataSource = Read-Host "Data Source"
$UserID = Read-Host "User ID"
$Password = Read-Host "Password" -assecurestring
$QueryString = Read-Host "Query String"

#===== newpopsさんのblog参照 http://d.hatena.ne.jp/newpops/20050923/p1 =====
#SecureStringからパスワード文字列を取得する
$ptr = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($Password)
$pass = [System.Runtime.InteropServices.Marshal]::PtrToStringBSTR($ptr)

#===== Oracleからのデータ取得 =====
[reflection.assembly]::LoadWithPartialName("System.Data.OracleClient")
$ConnectionString = "Data Source=" + $DataSource + ";User ID=" + $UserID + ";Password=" + $Pass + ";Integrated Security=no;"
$OraConn = New-Object System.Data.OracleClient.OracleConnection($ConnectionString)
$dtSet = New-Object System.Data.DataSet
$OraDa = New-Object System.Data.OracleClient.OracleDataAdapter($QueryString, $OraConn)
$OraDa.Fill($dtSet)

#===== Formの作成 =====
[reflection.assembly]::LoadWithPartialName("System.Windows.Forms")
$form = New-Object System.Windows.Forms.Form
$form.Text = $DataSource + "@" + $UserID
$form.Width = 500
$form.Height = 400

#===== DataGridViewの作成 =====
$dgvOracle = New-Object System.Windows.Forms.DataGridView
$dgvOracle.Dock = [System.Windows.Forms.DockStyle]::Fill
$dgvOracle.DataSource = $dtSet.Tables[0]
$form.Controls.Add($dgvOracle)

#===== Panelの作成 =====
$panel1 = New-Object System.Windows.Forms.Panel
$form.Controls.Add($panel1)
$panel1.Dock = [System.Windows.Forms.DockStyle]::Bottom
$panel1.Height = 30

#===== [XMLへ保存]ボタンの作成 =====
$btnExport = New-Object System.Windows.Forms.Button
$btnExport.Location = New-Object System.Drawing.Point(324, 4)
$btnExport.Text = "XMLへ保存"
$btnExport.anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Right
$btnExport.Add_Click(
{
#===== ファイル保存ダイアログを作成 =====
$dlgSave = New-Object System.Windows.Forms.SaveFileDialog
$dlgSave.DefaultExt = "XML"
$dlgSave.Filter = "XMLファイル(*.xml)|*.xml"
if ( $dlgSave.ShowDialog() -eq [System.Windows.Forms.DialogResult]::OK )
{
#===== データを保存する =====
$dtSet.WriteXml($dlgSave.Filename)
}
})
$panel1.Controls.Add($btnExport)

#===== [閉じる]ボタンの作成 =====
$btnClose = New-Object System.Windows.Forms.Button
$btnClose.Location = New-Object System.Drawing.Point(405, 4)
$btnClose.Text = "閉じる"
$btnClose.anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Right
$btnClose.Add_Click({$form.Close()})
$panel1.Controls.AddRange($btnClose)

#===== Formを表示 =====
$form.ShowDialog()
}

実行結果は下記の通りです。



今回のポイント
・Windows フォームを作成する
VB.NETやC#で開発をされている方は、ソースを見ると何となくわかると思います。

List1

$form = New-Object System.Windows.Forms.Form

でフォームのインスタンスを作成します。

・各コントロールの作成とフォームへの配置
コントロールを作成してフォームへ配置するには

List2

#コントロールの作成
$control = New-Object System.Windows.Forms.コントロール

#コントロールの配置
$form.ControlAdd($control)

#パネルへの配置
$panel1.Controls.Add($btnExport)

ボタンへのクリックイベントは下記のように記述します。

List3

$button.Add_Click({ここに処理したいスクリプトを記述})