#author("2018-08-15T21:29:50+09:00","","")
#author("2018-08-15T21:30:21+09:00","","")
#navi(../)
* PowerShellで.NET Framework版のSQLiteを操作する方法 [#y15e0a1e]
SQLiteには、.NET Framework 版があります。~
これを、PowerShellから操作する方法を以下に記します。

#htmlinsertpcsp(db-top.html,db-sp.html)

* 参考資料 [#zb091463]
-[[PowerShell から .NetFramework 版 SQLite を使う>http://d.hatena.ne.jp/himorogi/20141105/1415217173]]

* .NET Framework 版 SQLiteの入手 [#of650c82]
.NET Framework版のSQLiteは以下のURLからダウンロードすることができます。~
- SQLite System.Data.SQLiteのページ~
http://system.data.sqlite.org/
-
下の方にスクロールすると、32bit, 64bit, 各.NET Frameworkのsetupファイルのダウンロードリンクがあります。~
http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki

本資料では、Windows 10 64bit を使用し、.NET Framework版のSQLiteを操作します。~
Windows10に標準搭載されている、.NET Framework 4.6対応版をダウンロードして使用することにします。~
本資料では、以下の画像内で&color(red){赤}で囲んだファイルをダウンロードして使用しました。~
本資料では、以下の画像内で&color(red){赤};で囲んだファイルをダウンロードして使用しました。~
''sqlite-netFx46-static-binary-x64-2015-1.0.108.0.zip''
#ref(01.png)

* ダウンロードしたzipファイルから必要なファイルを取り出す [#wb970226]

今回は、テスト的に動作させるため、すべてデスクトップで作業を行います。~
+ デスクトップに ''SQLite'' フォルダを作成してください。
+ ダウンロードしたZIPファイルを展開します。
+ ダウンロードしたZIPファイルから、以下に記す3つのファイルをデスクトップに作成した''SQLite''フォルダにコピーしてください。
--SQLite.Interop.dll
--System.Data.SQLite.dll
--System.Data.SQLite.xml
--コピー(取り出す)ファイルのスクリーンショット(選択されている3つのファイルです)
#ref(02.png)
#br
--コピー後のスクリーンショットです。~
デスクトップ上にSQLiteフォルダがあり、フォルダ内には上記で記した3つのファイルがコピーされている状態です。
#ref(03.png)
#br
+ダウンロードしたファイルなので、ブロックの解除操作が必要となります。~
以下の手順で3つのファイルをブロック解除します。
++3つのファイルを1つずつ選択し、右クリックでコンテキストメニューを表示し「プロパティ」をクリックします。~
この操作を3ファイルに対して行います。(3回行うことになります。)~
下図は、SQLite.Interop.dllの設定を変更した例です。(他の2つのファイルも同様に操作してください。)
#ref(04.png)
#br
++セキュリティ:このファイルは他のコンピュータから取得したものです。…の~
「許可する」チェックボックスにチェック入れ、OKボタンを押します。
#ref(05.png)
#br

* .NET Framework版のSQLiteを操作するサンプルスクリプト [#q213f836]
以下のスクリプトをCut&PasteでPowerShellに貼り付ければ動作します。

 # System.Data.sqlite.dllのロード
 $asm = [System.Reflection.Assembly]::LoadFile("${HOME}\Desktop\SQLite\System.Data.sqlite.dll")
 
 # SQLiteへの接続およびSQLステートメント発行用のSystem.Data.SQLite.SQLiteCommandの生成
 $sqlite = New-Object System.Data.SQLite.SQLiteConnection
 $sqlite.ConnectionString = "Data Source = ${HOME}\Desktop\SQLite\testdb.sqlite3"
 $sqlcmd = New-Object System.Data.SQLite.SQLiteCommand
 $sqlcmd.Connection = $sqlite
 $sqlite.Open()
 
 # SQLiteのバージョン表示
 $sql = "SELECT sqlite_version()"
 $sqlcmd.CommandText = $sql
 $rs =  $sqlcmd.ExecuteReader()
 while ($rs.Read()){
   $rs[0]
 }
 
 # SQLiteCommandの破棄
 # これをしないと、以下のSQL発行で以下の例外メッセージが表示され中断されます。
 # "DataReader already active on this command"
 $sqlcmd.Dispose()
 $sql = "CREATE TABLE t1 (name, ostype)"
 $sqlcmd.CommandText = $sql
 $ret = $sqlcmd.ExecuteNonQuery()
 
 # INSERT実行
 $ins_data = @(@("Windows10","Windows"),@("Ubuntu","Linux"),@("FreeBSD","BSD"))
 $ins_data | % {
   $name  =$_[0];
   $ostype=$_[1];
   $sql="INSERT INTO t1 VALUES('${name}','${ostype}')"
   $sqlcmd.CommandText = $sql
   $ret = $sqlcmd.ExecuteNonQuery()
 }
 
 # SELECT実行および表示
 $sql = "SELECT * FROM t1"
 $sqlcmd.CommandText = $sql
 $rs =  $sqlcmd.ExecuteReader()
 while ($rs.Read()){
   Write-Host ("|{0,-12}|{1,-12}|" -f $rs[0], $rs[1])
 }
 
 # SQLiteの切断
 $sqlcmd.Dispose()
 $sqlite.Close()

上記のスクリプトを実際に実行したときの出力です。(Cut&Pasteしました。)
 PS C:\> # System.Data.sqlite.dllのロード
 PS C:\> $asm = [System.Reflection.Assembly]::LoadFile("${HOME}\Desktop\SQLite\System.Data.sqlite.dll")
 PS C:\>
 PS C:\> # SQLiteへの接続およびSQLステートメント発行用のSystem.Data.SQLite.SQLiteCommandの生成
 PS C:\> $sqlite = New-Object System.Data.SQLite.SQLiteConnection
 PS C:\> $sqlite.ConnectionString = "Data Source = ${HOME}\Desktop\SQLite\testdb.sqlite3"
 PS C:\> $sqlcmd = New-Object System.Data.SQLite.SQLiteCommand
 PS C:\> $sqlcmd.Connection = $sqlite
 PS C:\> $sqlite.Open()
 PS C:\>
 PS C:\> # SQLiteのバージョン表示
 PS C:\> $sql = "SELECT sqlite_version()"
 PS C:\> $sqlcmd.CommandText = $sql
 PS C:\> $rs =  $sqlcmd.ExecuteReader()
 PS C:\> while ($rs.Read()){
 >>   $rs[0]
 >> }
SQLiteのバージョンが表示されました。
 3.22.0
 PS C:\>
 PS C:\> # SQLiteCommandの破棄
 PS C:\> # これをしないと、以下のSQL発行で以下の例外メッセージが表示され中断されます。
 PS C:\> # "DataReader already active on this command"
 PS C:\> $sqlcmd.Dispose()
 PS C:\> $sql = "CREATE TABLE t1 (name, ostype)"
 PS C:\> $sqlcmd.CommandText = $sql
 PS C:\> $ret = $sqlcmd.ExecuteNonQuery()
 PS C:\>
INSERTを実行します。
 PS C:\> # INSERT実行
 PS C:\> $ins_data = @(@("Windows10","Windows"),@("Ubuntu","Linux"),@("FreeBSD","BSD"))
 PS C:\> $ins_data | % {
 >>   $name  =$_[0];
 >>   $ostype=$_[1];
 >>   $sql="INSERT INTO t1 VALUES('${name}','${ostype}')"
 >>   $sqlcmd.CommandText = $sql
 >>   $ret = $sqlcmd.ExecuteNonQuery()
 >> }
 PS C:\>
 PS C:\> # SELECT実行および表示
 PS C:\> $sql = "SELECT * FROM t1"
 PS C:\> $sqlcmd.CommandText = $sql
 PS C:\> $rs =  $sqlcmd.ExecuteReader()
 PS C:\> while ($rs.Read()){
 >>   Write-Host ("|{0,-12}|{1,-12}|" -f $rs[0], $rs[1])
 >> }
 |Windows10   |Windows     |
 |Ubuntu      |Linux       |
 |FreeBSD     |BSD         |
SELECT結果が表示されました。
 PS C:\>
 PS C:\> # SQLiteの切断
 PS C:\> $sqlcmd.Dispose()
 PS C:\> $sqlite.Close()
 PS C:\>

SQLiteのデータベースファイルが作成されいます。
#ref(06.png)

* ドキュメント [#k4336008]
上記で使ったメソッド以外にもたくさんのメソッドが提供されています。~
[[SQLite System.Data.SQLiteのページ>http://system.data.sqlite.org/]]にブラウザで接続し、~
下の方にスクロールすると「Documentation for System.Data.SQLite」があります。~
そこの、[[downloaded directly>http://system.data.sqlite.org/index.html/doc/trunk/Doc/SQLite.NET.chm?mimetype=application/x-chm]]リンクをクリックすると、HTMLヘルプファイル形式のドキュメントがダウロードできます。
#ref(07.png)
#br
ダウンロードしたファイルをダブルクリックすることにより、ドキュメントを見ることができます。~
ただし、ダウンロードしたファイルなので、セキュリティのためドキュメント内容が表示されませんでした。~
SQLite System.Data.SQLiteファイルと同様に、ブロックを外し許可する必要があります。~
ダウンロードしたファイルを右クリックしコンテキストメニューのプロパティをクリックすると以下の画面が表示されますので、~
「許可する」にチェックを入れ、OKボタンを押下します。
#ref(08.png)
#br
上記の操作後、ダウンロードしたSQLite.NET.chmをダブルクリックして起動すれば、~
以下のキャプチャーのようにドキュメントが表示されます。
#ref(09.png)

以上、.NET Framework用のSQLiteをPowerShellで使用するサンプルでした。

#htmlinsertpcsp(db-btm.html,db-sp.html)



トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS