ユーザ用ツール

サイト用ツール


powershell:sqlite_import_csv

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
powershell:sqlite_import_csv [2025/09/29 00:17] mikotopowershell:sqlite_import_csv [2025/10/14 00:49] (現在) mikoto
行 56: 行 56:
  
 ===== 例2 ===== ===== 例2 =====
 +トランザクションを使うことによって、書き込み処理をまとめて実行することができるため処理を高速化できる。
 +**$conn.BeginTransaction()**でトランザクションを開始し、**Comit()**で処理を確定する。
 <code powershell> <code powershell>
-# ツールのRootDirectory +Add-Type -AssemblyName System.Windows.Forms 
-$psRoot = "path\to\woridir"+Add-Type -AssemblyName System.Drawing 
 # sqlite3.dll を読み込む # sqlite3.dll を読み込む
-Add-Type -Path "$psRoot\dll\System.Data.SQLite.dll"+Add-Type -Path "path\to\dll\System.Data.SQLite.dll"
  
 # DBのファイルパス(無ければ新規作成) # DBのファイルパス(無ければ新規作成)
-$dbFile = "$psRoot\databases\file.db"+$dbFile = "path\to\database\database.db"
 $connStr = "Data Source=$dbFile;Version=3;" $connStr = "Data Source=$dbFile;Version=3;"
- 
-# CSV読み込み 
-$csvData = Import-Csv -Path "$psRoot\csvfile.csv" -Encoding Default 
  
 # SQLite 接続オブジェクトを作成 # SQLite 接続オブジェクトを作成
行 73: 行 73:
 $conn.Open() $conn.Open()
  
-# 処理の高速化のためトランザクション開始 +# CSVデータの読み込み 
-$tran = $conn.BeginTransaction() +$dialog = New-Object System.Windows.Forms.OpenFileDialog 
-$cmd = $conn.CreateCommand() +$dialog.Filter = "CSVファイル(*.csv)|*.csv|All files (*.*)|*.*" 
-$cmd.CommandText = "INSERT INTO haru_master (shopproduct_nameurl) VALUES (@shop, @product, @url);"+$dialog_result = $dialog.ShowDialog() 
 + 
 +if ($dialog_result -eq [System.Windows.Forms.DialogResult]::OK) { 
 +    $csvPath = $dialog.FileName 
 +    $csvData = Import-Csv -Path $csvPath 
 + 
 +    # 処理の高速化のためトランザクション開始 
 +    $tran = $conn.BeginTransaction() 
 +    $cmd = $conn.CreateCommand() 
 +    $cmd.Transaction = $tran 
 +    $cmd.CommandText = "INSERT INTO table_name (datecol1col2) VALUES (@date, @col1, @col2);" 
 + 
 +    # パラメータを一度だけ作成する 
 +    $null = $cmd.Parameters.Add("@date", [System.Data.DbType]::String) 
 +    $null = $cmd.Parameters.Add("@col1", [System.Data.DbType]::String) 
 +    $null = $cmd.Parameters.Add("@col2", [System.Data.DbType]::String) 
 + 
 +    foreach ($row in $csvData) { 
 +        $cmd.Parameters["@date"].Value = $row.'date' 
 +        $cmd.Parameters["@col1"].Value = $row.'col1' 
 +        $cmd.Parameters["@col2"].Value = $row.'col2' 
 +        $cmd.ExecuteNonQuery() | Out-Null 
 +    }
  
-メータ一度だけ作成 +    ンザクションコミットする 
-$null = $cmd.Parameters.Add("@shop",  [System.Data.DbType]::String) +    $tran.Commit()
-$null = $cmd.Parameters.Add("@product",  [System.Data.DbType]::String) +
-$null = $cmd.Parameters.Add("@url",  [System.Data.DbType]::String)+
  
-foreach ($row in $csvData) +} else 
-    $cmd.Parameters["@shop"].Value    = $row.shop +    [System.Windows.Forms.MessageBox]::Show("処理を中止しました。")
-    $cmd.Parameters["@product"].Value = $row.product +
-    $cmd.Parameters["@url"].Value     = $row.url +
-    $cmd.ExecuteNonQuery(| Out-Null+
 } }
  
-# トランザクションをコミット 
-$tran.Commit() 
  
 $conn.Close() $conn.Close()
 </code> </code>
powershell/sqlite_import_csv.1759072658.txt.gz · 最終更新: 2025/09/29 00:17 by mikoto