2013-01-11 54 views
5

我一直試圖找到這個問題的答案現在幾天,我發現很難相信這不能完成。訪問數據檢索

我想要去當頁面正在建設中當一個SqlDataSource.Select方法自動由ASP.NET運行時稱那是建立在DataSet/DataTable

我知道我可以在後面的代碼中運行它,但是這使得第二次訪問數據庫,我真的很想避免這種情況。我遇到的每個例子都告訴你在後面的代碼中執行Select方法。

有什麼方法可以訪問已經檢索的數據嗎?

+1

你知道,我試圖找出答案一次,幾年前,並決定它只是更容易綁定代碼隱藏的代碼,所以我更容易訪問數據集。如果有人知道如何做到這一點,這可能會改變我今後如何處理類似的情況。 +1詢問。 – David

+2

我根本不會使用該控件。而是使用ADO.NET(如'DataAdapter.Fill(DataTable)')或一個真正的ORM映射器(如NHibernate或Entity框架)。無論如何,目前還不清楚爲什麼你認爲「代碼背後的第二次訪問數據庫」。然後使用'if(!IsPostBack)'。 –

+0

真的沒有選擇控制。我需要對現有頁面進行更改,而不用重寫它。當您調用SqlDataSource上的Select方法時,它會根據Microsoft訪問數據庫http://msdn.microsoft.com/zh-cn/library/system.web.ui.webcontrols.sqldatasource.select.aspx – dscarr

回答

0

您可以使用此代碼嘗試 - 基於ToTable方法

DataView view = (DataView)SqlDataSource.Select(...); 
DataTable table = view.ToTable(); 

鏈接:http://msdn.microsoft.com/en-us/library/wec2b2e6.aspx

+0

This是我正在談論的代碼。在SqlDataSource上執行Select方法將從數據庫中檢索數據。 (http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.sqldatasource.select.aspx)我已經使用了很多次,但在這種情況下,我想避免第二次旅行。 – dscarr

+0

您能否解釋 –

+0

「避免第二次旅行」意味着您已經獲得了某處的數據。在這種情況下,你可以通過提供一個虛擬的'DataSource'來攔截在預渲染期間對'OnSelect()'的調用,並用你自己的(緩存的?)數據集替換結果數據? –