ループの前にトランザクションを開始し、それぞれの文をstringbuilderに追加するのではなく実行し、ループの後にコミットするか、またはn個のレコードごとにコミットすることをお勧めします。
また、あなたは、の線に沿って何かパラメータ化コマンドを使用する必要があります。また
SqlCeCommand oCommand = conn.CreateCommand();
oCommand.CommandText = "insert into contacts(name, emails) values(?, ?)";
// I can't remember if the param names need @ or not
oCommand.Parameters.Add("@name", SqlDbType.VarChar);
oCommand.Parameters.Add("@email", SqlDbType.VarChar);
SqlCeTransaction oTrans = conn.BeginTransaction();
try {
foreach (KeyValuePair<string, string> key in list) {
oCommand.Parameters[0].Value = key.Key;
oCommand.Parameters[1].Value = key.Value;
oCommand.ExecuteNonQuery();
}
oTrans.Commit();
} catch (Exception ex) {
oTrans.Rollback();
}
を、あなたはCodePlexのからSQL Compact Bulk Insert Libraryを使用することができます。私はこれがSqlCeResultSetの上にTableDirect SqlCeCommandを使用していると信じています.SqlCeResultSetはクエリプロセッサをバイパスして、できるだけ早く取得する必要があります。
私は思っています...あなたは物事のリストをバッチ挿入したいのですか、あるいは一連の選択から複数のデータセットを取得したいですか? – Martin