PowerShellの開発でお困りのことはありませんか?
そんな悩みは
当サイトで解決!!
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({ここに処理したいスクリプトを記述})
|