2012-11-18 54 views
0

對不起,他們問這個問題已經問了很多次了,但是我還沒有找到最好的答案。管理表中的記錄的最佳方式

我擔心應用需要較長的時間來下載記錄篩選記錄。假設我有一個名爲tbl_customer的表。並在tbl_customer記錄超過10,000行

第一個問題,我正在使用數據網格視圖來顯示記錄。如果我將的所有記錄下載到數據網格視圖中多達10,000行,會是理想的嗎?或者,我最好把記錄行限制?

第二個問題,什麼是tbl_customer過濾記錄最好的方式。我們只需要使用SQL查詢使用LINQ?或者有更好的方法?

現在,我只能用這樣的方式:

DataTable dtCustomer = new DataTable(); 

using (SqlConnection conn = new SqlConnection(cs.connString)) 
     { 
      string query = "SELECT customerName,customerAddress FROM tbl_customer WHERE customerAddress = '"+addressValue+"' ORDER BY customerName ASC;"; 

      using (SqlDataAdapter adap = new SqlDataAdapter(query, conn)) 
      { 
       adap.Fill(dtCustomer); 

      } 
     } 

dgvListCustomer.DataSource = dtCustomer 

然後我學習有關LINQ,所以我不喜歡這樣

DataTable dtCustomer = new DataTable(); 

     using (SqlConnection conn = new SqlConnection(cs.connString)) 
       { 
        string query = "SELECT * FROM tbl_customer ORDER BY customerName ASC;"; 

        using (SqlDataAdapter adap = new SqlDataAdapter(query, conn)) 
        { 
         adap.Fill(dtCustomer); 

        } 
       } 

var resultCustomer = from row in dtCustomer.AsEnumerable() 
             where row.Field<string>("customerAddress") == addressValue 
             select new 
             { 
              customerName = row["customerName"].ToString(), 
              customerAddress = row2["customerAddress"].ToString(), 

             }; 

dgvListCustomer.DataSource = resultCustomer; 

工作流SQL> DATATABLE> LINQ>的DataGridView是適合過濾記錄?或者如果有更好的建議是最受歡迎的。

謝謝你.. :)

+0

這裏有幾件事。首先,不要使用第一個示例中提供的SQL(查詢SQL注入)。其次,Linq-To-SQL的工作方式與您在本節中展示的方式不同。試試這個MSDN鏈接的更好的例子http://msdn.microsoft.com/en-us/library/bb425822.aspx – sybkar

+0

@sybkar:謝謝隊友.. :) – Chuki2

回答

1

我擔心的應用程序需要很長的時間來下載記錄或過濾記錄。

歡迎 - 你似乎生活在像我這樣一個世界裏,性能毫秒以毫秒爲單位,是的,低功耗的服務器上,將採取可能比一毫秒以上(0.001秒),熱負荷和過濾10.000行。

因此,我的建議是不要將該數據庫放在平板電腦或移動電話上,而應該至少爲數據庫服務器使用一個體面的桌面級計算機或虛擬機。

作爲提示:我經常在十億行表上進行查詢,並且速度很快。目前,一百萬行以下的任何事情都是一個笑話 - 事實上,當我超過十五年前開始使用數據庫時,沒有什麼值得一提的。你是這樣一個人,問是否有法拉利或保時捷比賽更好,你擔心這些情況是否會超過20公里/小時。

如果我將最多10,000行的所有記錄下載到數據網格視圖中,這將是理想的嗎?

爲了被解僱?是。使用數據庫的舊規則:從不加載更多的數據,特別是當您不知情時。忘記SQL方面 - 你會得到10,000行以上的UI問題,尤其是可用性問題。

我們是否需要使用SQL進行查詢?或使用LINQ?

提示:Linq也在引擎蓋下使用SQL。問題在於 - 您想花多少時間爲您的示例中的手寫SQL編寫無聊的重複代碼?從某種意義上說,你也做「聰明」的事情,比如按名稱引用字段,而不是序號,並要求「select *」而不是字段列表,這些都顯然是初學者的錯誤。

你絕對不應該做的 - 但你確實 - 正在使用一個DataTable。獲得一本關於編程數據庫的好書。 RTFSM可能有所幫助 - 我不確定你的意思 - LINQ是編譯器的語言,你需要一個實現器,所以可以是NHibernate,Entity Framework,Linq2Sql,BlToolkit,從LINQ查詢到sql語句)。

工作流SQL> DATATABLE> LINQ> DataGridView適合篩選記錄嗎?

法拉利還適合將20噸煤從A運輸到B--只是最糟糕的一輛車。 GSour堆棧可能是我見過的最差的,但它是適合的,因爲你可以做到這一點 - 緩慢的,很多的使用,但你會得到一個結果,並希望被解僱。將數據從高性能數據庫中提取到數據表中,然後使用非集成技術(LINQ)過濾(不使用數據表中的索引)以進入另一個層。

只是給你一個想法 - 這會讓你從一些「開始編程」課程中刪除。

什麼:

LINQ

點。

提取轉到UI的業務對象的集合。期。

閱讀至少一些您使用的技術的示例代碼。

+0

@TomTom ..是的,我仍然是新的編程領域。我對C#沒有直接的瞭解,但是我的老闆讓我在3個月內用C#編寫一個程序。所以我需要更快地學會完成。呵呵非常感謝你的解釋。 – Chuki2

+0

那麼,你會失敗。多次看過 - 老闆是不合理的。有一天,其他人將不得不清理你必須創造的混亂。 – TomTom