루프 전에 트랜잭션을 시작하고 각 명령문을 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를 사용한다고 믿는다.
약간의 오해의 소지가있는 제목 ... 생각 나는 것 목록을 일괄 적으로 삽입하거나 일련의 선택에서 여러 데이터 세트를 가져오고 싶습니까? – Martin