shskwmt
7/31/2019 - 3:28 PM

Access SQLite from PowerShell

[Reflection.Assembly]::LoadFile("C:\Program Files\PackageManagement\NuGet\Packages\System.Data.SQLite.Core.1.0.111.0\lib\net46\System.Data.SQLite.dll")
$sqlite = New-Object System.Data.SQLite.SQLiteConnection
$sqlite.ConnectionString = "Data Source = C:\Users\shskw\OneDrive\ドキュメント\test.db"
$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()