這是我的代碼我有:在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 2010-08-22 04:44:09
是的,它是快速可怕的4000插入不到一個感覺第二:) – Elisabeth 2010-08-22 07:58:33
它更加瘋狂在0,488秒插入40行5列哈哈。 Sqlite是瘋狂的快速。 – Elisabeth 2010-08-22 10:52:46