この記事は2008/01/22にわんくまブログで書いたものです。
ネタ元: データを取得してXMLファイルへ保存する(Oracle) (Windows PowerShell Tips)
でOracleデータベースからデータを取得し、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#で開発をされている方は、ソースを見ると何となくわかると思います。
**VB.NET**
Dim form As New Form()
**C#**
Form form = new Form();
**PowerShell**
$form = New-Object System.Windows.Forms.Form
でフォームのインスタンスを作成します。
・各コントロールの作成とフォームへの配置コントロールを作成してフォームへ配置するには
$control = New-Object System.Windows.Forms.コントロール
のように記述してコントロールを作成して
$form.ControlAdd($control)
としてフォームへ配置します。今回、ボタンはパネル上に配置したので
$panel1.Controls.Add($btnExport)
のようになっています。
・ボタンのクリックイベント
ボタンのクリックイベントは
$button.Add_Click({ここに処理したいスクリプトを記述})
のように記述します。
Theme design by Jelle Druyts
Pick a theme: BlogXP business calmBlue Candid Blue dasBlog dasblogger DirectionalRedux Discreet Blog Blue Elegante essence Just Html MadsSimple Mobile Mono Movable Radio Blue Movable Radio Heat nautica022 orangeCream Portal Project84 Project84Grass Slate Sound Waves Tricoleur useit.com Voidclass2 BlogXP business calmBlue Candid Blue dasBlog dasblogger DirectionalRedux Discreet Blog Blue Elegante essence Just Html MadsSimple Mobile Mono Movable Radio Blue Movable Radio Heat nautica022 orangeCream Portal Project84 Project84Grass Slate Sound Waves Tricoleur useit.com Voidclass2
Powered by: newtelligence dasBlog 2.0.7226.0
The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.
© Copyright 2009, HIRO
E-mail