|
こまめにcommitしようと思い、コードを一部変更しました。内容的には、1000件毎にコミットするといった使用に変更しました。 それを行うと、下記のようなエラーメッセージが表示されてしまいます。
ArgumentNullExceptionはハンドルされませんでした。 値を Null にすることはできません。 パラメーター名:No connection associated with this transaction
何が違っているのでしょうか?
long counter = 1; //←-----------------------追加
using (CsvReader csv = new CsvReader(new StreamReader(selectedFile, Encoding.GetEncoding("Shift_JIS")), hasHeader)) { using (SQLiteConnection cn = new SQLiteConnection(コネクションストリング)) { cn.Open(); using (SQLiteTransaction trans = cn.BeginTransaction()) SQLiteCommand cmd = cn.CreateCommand(); cmd.CommandText = "PRAGMA journal_mode = MEMORY"; // ジャーナルファイルをメモリ上に持つ cmd.ExecuteNonQuery();
while (csv.ReadNextRecord()) //1行読み込み { SQLiteCommand cmd = cn.CreateCommand(); StringBuilder CSVVALUE = new StringBuilder(); //VALUESの値を保存する StringBuilder insertSQL_And_VALUES = new StringBuilder(); //INSERT文とVALUESを結合したものを保存
for (int i = 0; i < csv.FieldCount; i++) { CSVVALUE.Append("'" + csv[i] + "',"); //VALUESで使用するデータを連結する } CSVVALUE = CSVVALUE.Remove(CSVVALUE.Length - 1, 1) ; //末尾のカンマを削除 insertSQL_And_VALUES.Append("INSERT INTO T " + " VALUES(" + CSVVALUE + ")"); //Insert SQL構築 cmd.CommandText = insertSQL_And_VALUES.ToString(); cmd.ExecuteNonQuery(); //Insert トランザクションコミット
//↓-----------------------追加 if(counter % 1000 == 0) { trans.Commit(); } counter++; //↑-----------------------追加
} //trans.Commit(); //最後の最後にコミット } }
|