이것은 내 코드입니다C#의 여러 foreach 루프에서 SQLite 삽입을 실행 하시겠습니까?
CommandText를 설정하는 것은 루프에서가 아닌 한 번만 수행해야한다는 것을 읽었지 만 foreach에서 개별 항목 데이터를 가져 오는 방법은 무엇입니까? 작동하는 솔루션 : 그 코드를 리팩토링 똑똑
사람, 즉 좋은 :)
using (SQLiteTransaction trans = DataAccess.ConnectionManager.BeginTransaction())
{
using (SQLiteCommand com = new SQLiteCommand(DataAccess.ConnectionManager))
{
// How can I add the parameters here if they are only known in the foreach loop?
com.Parameters.Add(new SQLiteParameter("@date", day.SchooldayDate));
com.Parameters.Add(new SQLiteParameter("@periodnumber", period.PeriodNumber));
com.Parameters.Add(new SQLiteParameter("@schoolclasscode", period.SchoolclassCode));
foreach (var week in weekList)
{
foreach (var day in week.Days)
{
foreach (var period in day.Periods)
{
com.CommandText = "Insert into tablename (date,periodnumber,schoolclasscode) Values (@date,@periodnumber,@schoolclasscode)";
}
}
}
com.ExecuteNonQuery();
}
trans.Commit();
}
UPDATE가 될 것입니다!
using (SQLiteTransaction trans = DataAccess.ConnectionManager.BeginTransaction())
{
using (SQLiteCommand com = new SQLiteCommand(DataAccess.ConnectionManager))
{
com.CommandText = "Insert into lessonday (lessondate,lessonnumber,schoolclasscode) VALUES (@lessondate,@lessonnumber,@schoolclasscode)";
SQLiteParameter p1 = new SQLiteParameter("@lessondate", DbType.DateTime);
SQLiteParameter p2 = new SQLiteParameter("@lessonnumber", DbType.Int32);
SQLiteParameter p3 = new SQLiteParameter("@schoolclasscode", DbType.String);
com.Parameters.Add(p1);
com.Parameters.Add(p2);
com.Parameters.Add(p3);
foreach (var week in weekList)
{
foreach (var day in week.Days)
{
p1.Value = day.SchooldayDate;
foreach (var period in day.Periods)
{
p2.Value = period.PeriodNumber;
p3.Value = period.SchooclassCode;
com.ExecuteNonQuery();
}
}
}
}
trans.Commit();
}
}
네, 그게 올바른 방법입니다 !! 매개 변수가있는 쿼리를 사용하여 삽입을 하나의 큰 트랜잭션으로 묶으면 Sqlite가 훨씬 더 빠릅니다. – TTT
네, 그것은 펠트 초보다 덜 빠른 4000 삽입물이었습니다. – Elisabeth
0,488 초에 5 열의 하하가있는 40K 행을 삽입하면 더 미쳤습니다. Sqlite는 매우 빠릅니다. – Elisabeth