demo以GridView1秀出資料後再把它全部寫入到一個名為Table1的資料表。
以下是一般初學者會寫的code
for (int i = 0; i < this.GridView1.Rows.Count; i++)
{
SqlConnection conn = demotools.getSqlConnection();//此為demo取得SqlConnection的方法
SqlCommand comm = new SqlCommand("INSERT INTO [Table1] ([name]) VALUES (@name)", conn);
conn.Open();
comm.Parameters.AddWithValue("name", this.GridView1.Rows[i].Cells[1].Text);
comm.ExecuteNonQuery();
conn.Dispose();
comm.Dispose();
}
沒錯這樣寫是可以正常的寫入資料庫,但是因為開關連結的方式包含在for迴圈內所以就會發生前文所說得問題,瘋狂的開關,為了節省效能我們應該這樣寫
SqlConnection conn = demotools.getSqlConnection();
SqlCommand comm = new SqlCommand("INSERT INTO [Table1] ([name]) VALUES (@name)", conn);
//以上都應該放在for迴圈外(除非你會變動=.=)
int i;
//宣告變數也應該放在外面不應該在for內
conn.Open();//開啟連結拿出來了
for (i = 0; i < this.GridView1.Rows.Count; i++)
{
comm.Parameters.Clear();//清除掉目前宣告出來的Parameters
comm.Parameters.AddWithValue("name", this.GridView1.Rows[i].Cells[1].Text);
comm.ExecuteNonQuery();
}
conn.Dispose();
comm.Dispose();
測試環境:SQL2005 Express
測試資料量:10萬筆
測試次數:10次
平均秒數:64.4867秒
這樣子的寫法是demo目前會的最好的寫法,當然我還很嫩其他的大大一定有更好的寫法還請多指教...當然其中還可以加上交易等判斷但那些不是此篇的重點所以demo以最簡單的方式寫出來,希望此篇對您會有所幫助,或許你懷疑SQL怎麼會那麼慢,請注意測試環境使用的是Express版本,並且10萬筆這種大筆數本來就不太應該用這方法寫...
沒有留言:
張貼留言