====== 簡易DBマネージャー ======
[[:powershell|一つ上へ]]
作成中。
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
# sqlite3.dll を読み込む
Add-Type -Path "path\to\dll\System.Data.SQLite.dll"
# DBのファイルパス(無ければ新規作成)
$dbFile = "path\to\database\database.db"
$connStr = "Data Source=$dbFile;Version=3;"
<# --- 関数定義 Begin--- #>
function Show-Tablelist {
param (
[System.Data.SQLite.SQLiteConnection]$connection,
[System.Windows.Forms.ListBox]$listbox
)
$cmd = $connection.CreateCommand()
$cmd.CommandText = "SELECT name FROM sqlite_master WHERE type='table' ORDER BY name;"
$reader = $cmd.ExecuteReader() # Readの時はOut-Nullの必要なし
$listbox.Items.Clear()
while ($reader.Read()) {
$tablename = $reader["name"]
$listbox.Items.Add($tablename)
}
$reader.Close()
}
<# --- 関数定義 End #>
if (-not (Test-Path $dbFile)) {
[System.Data.SQLite.SQLiteConnection]::CreateFile($dbFile)
}
# SQLite 接続オブジェクトを作成
$conn = New-Object System.Data.SQLite.SQLiteConnection($connStr)
$conn.Open()
# コマンドオブジェクト
$cmd = $conn.CreateCommand()
# フォーム作成
$form = New-Object System.Windows.Forms.Form
$form.Text = "データベース管理"
$form.MinimumSize = New-Object System.Drawing.Size(900,600)
$form.Size = New-Object System.Drawing.Size(1200,800)
# テーブルリスト
$tableListLabel = New-Object System.Windows.Forms.Label
$tableListLabel.Text = "テーブルリスト"
$tableListLabel.Location = New-Object System.Drawing.Point(20,20)
$tableList = New-Object System.Windows.Forms.ListBox
$tableList.Location = New-Object System.Drawing.Point(20,50)
$tableList.Size = New-Object System.Drawing.Size(200,300)
Show-Tablelist -connection $conn -listbox $tableList
# --- データインポートボタン ---
$btnImport = New-Object System.Windows.Forms.Button
$btnImport.Text = "インポート"
$btnImport.Location = New-Object System.Drawing.Point(100,20)
# データインポート処理
$btnImport.Add_Click({
$dialog = New-Object System.Windows.Forms.OpenFileDialog
#$dialog.InitialDirectory = [Environment]::GetFolderPath("Desktop") # 初期フォルダ
$dialog.Filter = "CSVファイル(*.csv)|*.csv|All files (*.*)|*.*"
$dialog_result = $dialog.ShowDialog()
if ($dialog_result -eq [System.Windows.Forms.DialogResult]::OK) {
$filePath = $dialog.FileName
Write-Host "選択されたファイル: $filePath"
} else {
[System.Windows.Forms.MessageBox]::Show("処理を中止しました。")
}
})
# テーブル削除
$btnTbDrop = New-Object System.Windows.Forms.Button
$btnTbDrop.Location = New-Object System.Drawing.Point(200,20)
$btnTbDrop.Width = 100
$btnTbDrop.Text = "テーブル削除"
$btnTbDrop.Add_Click({
if ( $tableList.SelectedItem -ne $null ) {
$selected_table_name = [string]$tableList.SelectedItem
$cmd.CommandText = "DROP TABLE IF EXISTS [$selected_table_name];"
$cmd.ExecuteNonQuery()
[System.Windows.Forms.MessageBox]::Show("テーブルが削除されました。", "確認")
try {
Show-Tablelist -connection $conn -listbox $tableList
} catch {
[System.Windows.Forms.MessageBox]::Show("例外が発生しました。", "警告")
}
} else {
[System.Windows.Forms.MessageBox]::Show("テーブルが選択されていません。", "確認")
}
})
# テーブルデータの削除
$btnDeleteTableData = New-Object System.Windows.Forms.Button
$btnDeleteTableData.Location = New-Object System.Drawing.Point(500,20)
$btnDeleteTableData.Width = 100
$btnDeleteTableData.Text = "テーブルデータ削除"
$btnDeleteTableData.Add_Click({
if ($tableList.SelectedItem -ne $null) {
$selected_table_name = $tableList.SelectedItem
$user_result = [System.Windows.Forms.MessageBox]::Show(
"$selected_table_name のデータを削除しますか。",
"確認",
[System.Windows.Forms.MessageBoxButtons]::YesNo,
[System.Windows.Forms.MessageBoxIcon]::Question
)
if ($user_result -eq [System.Windows.Forms.DialogResult]::Yes){
$cmd.CommandText = "DELETE FROM [$selected_table_name];"
$null = $cmd.ExecuteNonQuery()
[System.Windows.Forms.MessageBox]::Show("データを削除しました。")
} else {
[System.Windows.Forms.MessageBox]::Show("キャンセルしました。")
}
} else {
[System.Windows.Forms.MessageBox]::Show("テーブルが選択されていません。")
}
})
# データの表示
$dataGridArea = New-Object System.Windows.Forms.DataGridView
$dataGridArea.Location = New-Object System.Drawing.Point(400,200)
$dataGridArea.Size = New-Object System.Drawing.Size(400,400)
$dataGridArea.AutoSizeColumnsMode = "Fill"
$dataGridArea.ReadOnly = $true
$dataGridArea.Anchor = [System.Windows.Forms.AnchorStyles]::Top `
-bor [System.Windows.Forms.AnchorStyles]::Bottom `
-bor [System.Windows.Forms.AnchorStyles]::Left `
-bor [System.Windows.Forms.AnchorStyles]::Right
# セルを選択したときにその値を表示する
$dataGridArea.Add_CellClick({
param($s, $e)
$rowIndex = $e.RowIndex
$colIndex = $e.ColumnIndex
if ($rowIndex -ge 0 -and $colIndex -ge 0) {
$cellValue = $s.Rows[$rowIndex].Cells[$colIndex].Value
[System.Windows.Forms.MessageBox]::Show("$cellValue", "セル情報")
}
})
# コントロールを追加
$form.Controls.Add($tableListLabel)
$form.Controls.Add($btnImport)
$form.Controls.Add($tableList)
$form.Controls.Add($btnTbDrop)
$form.Controls.Add($btnDeleteTableData)
$form.Controls.Add($dataGridArea)
$form.Add_FormClosed({ $conn.Close() })
# フォームを表示
[void]$form.ShowDialog()
===== 値ビューワー領域 =====
# セルを選択したときにその値を表示する
$dataGridArea.Add_CellClick({
param($s, $e)
$rowIndex = $e.RowIndex
$colIndex = $e.ColumnIndex
if ($rowIndex -ge 0 -and $colIndex -ge 0) {
$cellValue = $s.Rows[$rowIndex].Cells[$colIndex].Value
#[System.Windows.Forms.MessageBox]::Show("$cellValue", "セル情報")
$valueViewer.Text = [string]$cellValue
}
})
# セルのデータを表示する領域
$valueViewer = New-Object System.Windows.Forms.TextBox
$valueViewer.Multiline = $true
$valueViewer.ScrollBars = "Vertical"
$valueViewer.Location = New-Object System.Drawing.Point(900,20)
$valueViewer.Size = New-Object System.Drawing.Size(200,700)
$valueViewer.ReadOnly = $true
$valueViewer.Anchor = "Top, Bottom, Right"