[Tips] メソッドを追加してみる

String型の値にダブルクォーテーションを付けて出力させる、という処理が頻繁にあったため、String型にメソッドを追加してみました。

メソッド名はAddDoubleQuoteとし、以下のようにして使用できるようにしたいと思います。

PS> $str = "Test"
PS> $str.AddDoubleQuote()
PS> "Test"

以下は、AddDoubleQuoteメソッド作成手順です。

まずは、xmlファイルを作成します。

<?xml version="1.0" encoding="utf-8" ?> 
<Types>  
  <Type> 
    <Name>System.String</Name> 
    <Members> 
      <ScriptMethod> 
        <Name>AddDoubleQuote</Name> 
        <Script> 
          '"' + $this + '"'
        </Script> 
      </ScriptMethod> 
    </Members> 
  </Type> 
</Types>

Stringクラスの拡張となるため、<Name>タグにはSystem.Stringを記述。

メソッド名は、AddDoubleQuoteとするので、<ScriptMethod>タグの中の<Name>タグの中に記述します。

そして、実際の処理は<Script>タグの中に記述します。

自分自身は$thisで表されます。ここでは$thisの両脇にダブルクォーテーションが付くようにしています。

上記のXMLファイルは、拡張子をps1xmlとして保存します。

今回は $pshome 配下に AddDoubleQuote.ps1xml という名前で保存しました。
AddDoubleQuoteメソッドを使用できるようにするには、Update-TypeDataコマンドレットを使用します。

update-typedata -prependpath C:\Windows\System32\WindowsPowerShell\v1.0\AddDoubleQuote.ps1xml

あとは、最初の例に示した方法で使用します。

PS> $str = "Test"
PS> $str.AddDoubleQuote()
PS> "Test"

追加したAddDoubleQuoteメソッドは、PowerShellコンソール単位でしか使えません。
処理を永続化したい場合は、$PROFILEに登録しておきましょう。

プロファイルがまだない場合は下記コマンドで作成します。

New-item –type file –force $profile

あとは、作成したプロファイルに下記を追加します。これで、次回以降PowerShellが起動されたときから AddDoubleQuoteメソッドが使えるようになります。

update-typedata -prependpath C:\Windows\System32\WindowsPowerShell\v1.0\AddDoubleQuote.ps1xml

PowerShellでSQLiteを使用する(4)

前回は SQLiteでInsert文を使用する方法について説明しました。

データを追加したら、やはり取得できなくては意味がないですね。

ということで、今回はSELECT文を使用する方法について説明します。

INSERT文の時と異なる部分は、ヒア文字列の中身がSELECT文になるということ、

コマンドの実行が、ExecuteNonQueryからExecuteReaderに代わることです。

ExequteRederは実行したSQL文で影響を受けた行が返されます。

戻り値のReadメソッドを実行すると、SQL文に合致するレコードの有無がわかるので、While文でループして各データの取り出しを行います。

[void][System.Reflection.Assembly]::LoadFile("C:\Work\DB\System.Data.sqlite.dll")
$sqlite = New-Object System.Data.SQLite.SQLiteConnection
$sqlite.ConnectionString = "Data Source = C:\Work\DB\data.db"
$sqlite.Open()

#SELECT文
$cmd = @"
SELECT * FROM USER
"@

$sqlcmd = New-Object System.Data.SQLite.SQLiteCommand
$sqlcmd.Connection = $sqlite
$sqlcmd.CommandText = $cmd

$record = $sqlcmd.ExecuteReader()

while ( $record.Read() )
{
	write ("{0}`t{1}" -f $record[0], $record[1])
}
$sqlite.Close()

PowerShellでSQLiteを使用する(3)

前回は テーブルを作成する方法を紹介しました。

今回は、作成したテーブルにデータを追加する方法について説明します。

といっても簡単で、前回のコードのヒア文字列部分(テーブルを作成している箇所ですね)を、Insert文に書き換えればOKです。

以下にコード例を示します。

この例では、empno が 1 、name が ”HIRO” というデータを追加します。

[void][System.Reflection.Assembly]::LoadFile("C:\Work\DB\System.Data.sqlite.dll")
$sqlite = New-Object System.Data.SQLite.SQLiteConnection
$sqlite.ConnectionString = "Data Source = C:\Work\DB\data.db"
$sqlite.Open()

#INSERT文
$cmd = @"
INSERT INTO USER 
(empno,name)
values 
(1,'HIRO')
"@

$sqlcmd = New-Object System.Data.SQLite.SQLiteCommand
$sqlcmd.Connection = $sqlite
$sqlcmd.CommandText = $cmd
$sqlcmd.ExecuteNonQuery()
$sqlite.Close()

次回は、SELECT文を使用する方法について説明します。

PowerShellでSQLiteを使用する(2)

SQLiteでテーブルを作成するには CREATE TABLEを実行します。

CREATE TABLEの構文は下記の通りです。

構文

CREATE TABLE テーブル名 (カラム名1, カラム名2, …)

もし empno, name というカラムを持つ、USERというテーブルを作成する場合は、下記のようになります。

CREATE TABLE USER (empno, name)

それではpowershell でSQLiteにテーブルを作成してみましょう。

接続やデータベースを開く、閉じる方法については前回説明したとおりです。

[void][System.Reflection.Assembly]::LoadFile("C:\Work\DB\System.Data.sqlite.dll")
$sqlite = New-Object System.Data.SQLite.SQLiteConnection
$sqlite.ConnectionString = "Data Source = C:\Work\DB\data.db"
$sqlite.Open()
#テーブル作成用文字列
$tbl = @"
CREATE TABLE user (empno, name)
"@
$sqlcmd = New-Object System.Data.SQLite.SQLiteCommand
$sqlcmd.Connection = $sqlite
$sqlcmd.CommandText = $tbl
$sqlcmd.ExecuteNonQuery()
$sqlite.Close()

データベースを開いたら、$tbl変数に、テーブルを作成するための文字列 CREATE TABLEを設定しています。

あとは、ComanndTextプロパティに作成してCREATE TABLEの文字列をセットし、ExecuteNonQueryメソッドを実行します。

最後に Closeメソッドを実行して終了です。

PowerShellでSQLiteを使用する(1)

SQLiteは、サーバーとしてではなく、アプリケーション組み込んで使用する軽量なデータベースです。

.NETのライブラリが提供されているので http://www.sqlite.org/download.html にアクセスして Precompiled Binaries for .NET と書かれたところにある System.Data.SQLite というリンクをクリックします。

次に、自分が使用しているPowerShell に合わせ、zipファイルをダウンロードして解凍します。

今回 sqlite-netFx20-binary-Win32-2005-1.0.88.0.zip を入手して解凍しました。

ここまでで準備完了です。

次はPowerShellを開いて下記コードを入力し、アセンブリをロードします。パスはご使用の環境合わせて変更して下さい。

[System.Reflection.Assembly]::LoadFile("C:\Work\DB\System.Data.sqlite.dll")

次に、接続文字列を作成し、データベースを開きます。

接続文字列はConnectionStringプロパティに設定します。データベースを開くにはOpenメソッドを実行します。

$sqlite.ConnectionString = "Data Source = C:\Work\DB\data.db"
$sqlite.Open()

データベースを閉じる場合はCloseメソッドを実行します。

$sqlite.Close()

データベースの開き方と閉じ方がわかりました。

あとはデータの追加方法や取得方法について学んでいけばOKです。

今日は時間がないので、ここまでとします。

続きは次回….