抓取正規化資料庫資料2-運用DataTable
剛好有朋友提到如果一直去資料庫撈資料會不會降低效能?
其實是要看的是資料量以及關聯資料的項目多寡而定的,就拿以下這張圖來說~
我需要將tb_ship(打錯英文XD)的資料表的id來撈tbl_CabinsShips的資料
在上一篇抓取正規化資料庫資料一文有說過,先去seclect tbl_ship這個資料表再去撈tbl_CabinsShips的資料
效能方面,按著這一個4910筆的資料量來說,其實還是不使用DataTable還來的快需多
不過相反的,如果是以tbl_CabinShips來撈tb_ship的資料的話~效能則會大大的降低
(基本上不會有人會這樣實做的啦~XD)
為什麼呢?其實是SQL指令惹的禍不使用DataTable這支程式他其實使用了4911次的SQL指令,而上面的圖那一支不使用DataTable的程式只使用了8次SQL指令。
因此效能會大大的降低。而把資料塞到DataTable其實也會花一段時間,但是比起來如果不執行太多次的SQL指令的話,其實是察覺不出來的!
那在這邊也簡單的介紹如何將資料庫的資料塞到DataTable裡以及使用正規化的方法來印出來。
private DataTable MakeTabe1()
{
DataTable Mytable = new DataTable("tbl_shop");
string sql = "SELECT * FROM [tbl_shop]";
string Database = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Inetpub\\wwwroot\\table\\App_Data\\Other_Tables.mdb;";
OleDbConnection Conn = new OleDbConnection(Database);
Conn.Open();
OleDbDataAdapter ds = new OleDbDataAdapter(sql, Conn);
ds.Fill(Mytable);
ds.Dispose();
Conn.Close();
return Mytable;
}
private DataTable MakeTabe2()
{
DataTable Mytable = new DataTable("tbl_CabinsShips");
string sql = "SELECT * FROM [tbl_CabinsShips]";
string Database = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Inetpub\\wwwroot\\table\\App_Data\\Other_Tables.mdb;";
OleDbConnection Conn = new OleDbConnection(Database);
Conn.Open();
OleDbDataAdapter ds = new OleDbDataAdapter(sql, Conn);
ds.Fill(Mytable);
ds.Dispose();
Conn.Close();
return Mytable;
}
DataTable dt1 = MakeTabe1();
DataTable dt2 = MakeTabe2();
DataRow[] dr;//宣告一個DataRow來把關聯資料表放入
for (int i = 0; i < dt1.Rows.Count; i++)
{
dr = null;
Response.Write(dt1.Rows[i][1] + "<br>");//印出群組名稱
dr = dt2.Select("ingShip=" + dt1.Rows[i][0]);//將dt2的資料做篩選放入DataRow裡
foreach (DataRow drr in dr)//把資料讀出來
{
Response.Write("<font size='2'>【" + drr[2] + "】</font>");
Response.Write("(" + drr[4] + ")<br/>");
}
}
說實在的~這樣的程式看跟上一篇的程式看起來乾淨許多了,也因為我把一些不用出現在這邊的東西都去掉了啦XD
不然很多朋友都會看不大懂我在幹麻~(呵~)
P.S 希望有高手能夠多給一些指教