ユーザ用ツール

サイト用ツール


powershell:sqlite_import_csv

差分

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

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
powershell:sqlite_import_csv [2025/09/29 00:21] mikotopowershell:sqlite_import_csv [2025/10/15 07:29] (現在) mikoto
行 59: 行 59:
 **$conn.BeginTransaction()**でトランザクションを開始し、**Comit()**で処理を確定する。 **$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読み込み +# SQLite 接続オブジェクトを作成 
-$csvData = Import-Csv -Path "$psRoot\csvfile.csv" -Encoding Default+$conn = New-Object System.Data.SQLite.SQLiteConnection($connStr) 
 +$conn.Open() 
 + 
 +# CSVデータの読み込み 
 +$dialog = New-Object System.Windows.Forms.OpenFileDialog 
 +$dialog.Filter = "CSVファイル(*.csv)|*.csv|All files (*.*)|*.*" 
 +$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 (date, col1, col2) 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 
 +    } 
 + 
 +    # トランザクションをコミットする 
 +    $tran.Commit() 
 + 
 +} else { 
 +    [System.Windows.Forms.MessageBox]::Show("処理を中止しました。"
 +
 + 
 + 
 +$conn.Close() 
 +</code> 
 + 
 +===== TSVのインポート ===== 
 + 
 +<code 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;" 
 + 
 +$sql = @" 
 +INSERT INTO share 
 +    (code, campany, quantity, obtained_price, current_price) 
 +VALUES 
 +    (@code, @campany, @quantity, @obtained_price, @current_price) 
 +"@
  
 # SQLite 接続オブジェクトを作成 # SQLite 接続オブジェクトを作成
行 75: 行 135:
 $conn.Open() $conn.Open()
  
-# 処理の高速化のためトランザクション開始 +# CSVデータの読み込み 
-$tran = $conn.BeginTransaction() +$dialog = New-Object System.Windows.Forms.OpenFileDialog 
-$cmd = $conn.CreateCommand() +#$dialog.InitialDirectory = "C:\Users\username\Downloads" 
-$cmd.CommandText = "INSERT INTO haru_master (shopproduct_name, urlVALUES (@shop, @product, @url);"+$dialog.Filter = "CSVファイル(*.csv)|*.csv|All files (*.*)|*.*" 
 +$dialog_result = $dialog.ShowDialog() 
 + 
 +if ($dialog_result -eq [System.Windows.Forms.DialogResult]::OK) { 
 +    $csvPath = $dialog.FileName 
 +    $csvData = Import-Csv -Path $csvPath -Delimiter "`t" -Encoding Default 
 +    $csvData 
 +    # 処理の高速化のためトランザクション開始 
 +    $tran = $conn.BeginTransaction() 
 +    $cmd = $conn.CreateCommand() 
 +    $cmd.Transaction = $tran 
 +    $cmd.CommandText = $sql 
 +    # パラメータを一度だけ作成する 
 +    $null = $cmd.Parameters.Add("@code", [System.Data.DbType]::String) 
 +    $null = $cmd.Parameters.Add("@campany"[System.Data.DbType]::String) 
 +    $null = $cmd.Parameters.Add("@quantity"[System.Data.DbType]::Int16) 
 +    $null = $cmd.Parameters.Add("@obtained_price"[System.Data.DbType]::Int16) 
 +    $null = $cmd.Parameters.Add("@current_price", [System.Data.DbType]::Double) 
 + 
 +    foreach ($row in $csvData) { 
 +        $cmd.Parameters["@code"].Value = $row.'コード' 
 +        $cmd.Parameters["@campany"].Value = $row.'会社名' 
 +        $cmd.Parameters["@quantity"].Value = $row.'数量' 
 +        $cmd.Parameters["@obtained_price"].Value = $row.'取得単価' 
 +        $cmd.Parameters["@current_price"].Value = $row.'現在値' 
 +        $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.1759072868.txt.gz · 最終更新: 2025/09/29 00:21 by mikoto