2009-09-08 22 views
4

這是一個很好的做法,有什麼我需要注意的嗎?我綁定中繼器到一個asp:SqlDataSource。這樣做的主要原因是獲得對SqlCommand的更多控制(例如CommandTimeout)。將SqlDataReader綁定到Repeater。良好的做法?

例子:

try 
    { 
     SqlDataReader MyReader = GetSomeResultsFromSqlCommand(); 
     MyRepeater.DataSource = MyReader; 
     MyRepeater.DataBind(); 
    } 
    catch (Exception ex) 
    { 
     throw ex; 
    } 
    finally 
    { 
     MyReader.Close(); 
    } 
+0

你不需要catch和re-throw塊。終於會照顧它。或者使用Andrew Hare – Keltex 2009-09-08 16:04:57

回答

15

這是一個完全正常的事情 - 讓我提供了一個更簡潔的語法,將提供相同的結果,並提供相同的故障安全清理能力:

using (SqlDataReader MyReader = GetSomeResultsFromSqlCommand()) 
{ 
    MyRepeater.DataSource = MyReader; 
    MyRepeater.DataBind(); 
} 
2

您的代碼似乎寫,不一定出現違反任何的最佳做法是確定。但是,您可以編輯者的代碼位,並利用「使用」的聲明,而不是嘗試,捕捉,最後...


我個人儘量避免使用SqlDataSource的,因爲它緊密結合您的前端代碼到您的數據。爲了保持關注的分離,我會在一個類中創建一個函數,它可以爲您提供這些數據,並且可以根據需要進行自定義。

1

真的沒什麼錯,如果你按照Andrew的說法,將其包裝在一個使用區域中。我可能做的另一件事是使用ObjectDataSource,並返回一個強類型的業務對象的IEnumerable。這將促使您使用良好的業務和數據分層代碼,如果您願意,可以更容易地使用ORM,並且可以爲您提供對所需SQL命令的額外控制。

+0

+1好的建議。 – 2009-09-08 16:09:16

+0

還沒有做過。你會提供良好的方法鏈接,如果可用?謝謝。 – Eddie 2009-09-08 16:21:05