抓取正規化資料庫資料2-運用DataTable

抓取正規化資料庫資料2-運用DataTable

剛好有朋友提到如果一直去資料庫撈資料會不會降低效能?

其實是要看的是資料量以及關聯資料的項目多寡而定的,就拿以下這張圖來說~

image

我需要將tb_ship(打錯英文XD)的資料表的id來撈tbl_CabinsShips的資料

在上一篇抓取正規化資料庫資料一文有說過,先去seclect tbl_ship這個資料表再去撈tbl_CabinsShips的資料

效能方面,按著這一個4910筆的資料量來說,其實還是不使用DataTable還來的快需多

image

不過相反的,如果是以tbl_CabinShips來撈tb_ship的資料的話~效能則會大大的降低

(基本上不會有人會這樣實做的啦~XD)

image

為什麼呢?其實是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 希望有高手能夠多給一些指教