PowerShell から .NetFramework 版 SQLite を使う
まず、.NetFramework 版 SQLite である System.Data.SQLite を入手する。
うちの会社では原則として管理者権限禁止(その都度要申請)なので installer 版ではなく binary 版を落としてくる。
Windows7 なので PowerShell V2.0 及び .NetFrameworks 3.5 環境対応のものが必要。
Precompiled Binaries for 32-bit Windows (.NET Framework 3.5)
http://system.data.sqlite.org/downloads/1.0.94.0/sqlite-netFx35-binary-bundle-Win32-2010-1.0.94.0.zip
なお、PowerShell からは以下のファイルを参照するようなので、SQLite データベースファイルと一緒に必要不可欠なファイルのみ管理するときは、これらファイルだけを解凍した内容から抜き出せばいい。
SQLite.Interop.dll System.Data.SQLite.dll System.Data.SQLite.xml
ただしダウンロードして解凍した直後は「ファイルのプロパティ」にてブロックされているためブロック解除する必要がある。
それぞれの[ファイルのプロパティ]>[全般]タブ>[セキュリティ]>[ブロックの解除]ボタンをクリックする。
とにかく PowerShell からの参照でエラーメッセージが出たら、該当するファイルが期待される場所に保存されているか確認し、かつファイルがブロックされていないか確認してみること。
というわけで、とりあえずのサンプルコード。
PoswerShell.ISE からの実行で cmd.exe を経由しないので当然のことながら文字化けはない。
System.Data.SQLite 関連の上記3ファイルと、下に記す script file を同じフォルダに格納して実行する実行すると、そのフォルダに sample というファイル名の SQLite データベースファイルが生成される。
ここで
Split-Path ( & { $myInvocation.ScriptName } ) -parent
は、実行している script file の path を取得している。
スクリプトファイルの場所:PowerShell log:So-net blog
$ScriptBase = Split-Path ( & { $myInvocation.ScriptName } ) -parent $dbMOdule = Join-Path $ScriptBase System.Data.SQLite.dll $dbFile = Join-Path $ScriptBase sample [void][System.Reflection.Assembly]::LoadFile( $dbModule ) $sqliteH = New-Object System.Data.SQLite.SQLiteConnection $sqliteH.ConnectionString = "Data Source = $dbFile" $sqliteH.Open() $sqlcmd = New-Object System.Data.SQLite.SQLiteCommand $sqlcmd.Connection = $sqliteH $sqlcmd.CommandText = "CREATE TABLE list ( id, title )" $q = $sqlcmd.ExecuteNonQuery() $sqlcmd.CommandText = "INSERT INTO list ( id, title ) values( 1, '天上天下唯我独尊' )" $q = $sqlcmd.ExecuteNonQuery() $sqlcmd.CommandText = "INSERT INTO list ( id, title ) values( 2, '有朋自遠方来不亦楽乎' )" $q = $sqlcmd.ExecuteNonQuery() $sqlcmd.CommandText = "INSERT INTO list ( id, title ) values( 3, '国破山河在城春草木深' )" $q = $sqlcmd.ExecuteNonQuery() $sqlcmd.CommandText = "SELECT * FROM list" $q = $sqlcmd.ExecuteReader() while( $q.Read() ){ write ( "{0}`t{1}" -f $q[0], $q[1] ) } $sqliteH.Close()
実行結果
PS C:\Users\hoge\Desktop\dbtoolWithSQLite3> C:\Users\hoge\Desktop\dbtoolWithSQLite3\sampleSQLiteViaDotNet.ps1 1 天上天下唯我独尊 2 有朋自遠方来不亦楽乎 3 国破山河在城春草木深