2011-06-02 122 views
4

我正在創建儀表板。我已經開始重構應用程序,所以與查詢數據庫有關的方法是通用的或動態的。動態查詢SQL Server

我對泛型的概念相當陌生,仍然是一個業餘程序員,但我做了一些搜索,我試圖想出一個解決方案。問題不是真正以動態方式構建查詢字符串。我很好地連接字符串文字和變量,我並不需要任何更復雜的東西。對我來說更大的問題是當我創建這個查詢時,獲取數據並以動態方式將其分配給正確的變量。

可以說我有一個缺陷表,另一個用於測試用例,另一個用於測試運行。我想創建一個如下所示的方法:

public void QueryDatabase<T>(ref List<T> Entitylist, List<string> Columns, string query) where T: Defect, new() 

現在,這不是完美的,但你明白了。並非所有關於缺陷,測試用例和測試運行的內容都是相同的,但是,我正在尋找一種將檢索列動態分配給其「正確」變量的方法。

如果需要更多信息,我可以提供。

+0

您正在使用哪種版本的.NET? – msarchet 2011-06-02 19:51:33

+0

我正在使用.NET 4 – 2011-06-02 19:53:33

回答

3

你正在重塑車輪,是的,這是真的。建議您最好使用「貨架」上的對象關係映射器。但我認爲你也應該回答你的問題:爲查詢結果動態地分配正確的屬性,你可以使用反射。如果需要更多信息,請參閱System.Reflection命名空間的文檔。

14

你正在重新發明車輪。使用ORM,如實體框架或NHibernate。你會發現它更加靈活,這樣的工具將會隨着時間的推移而不斷髮展,增加新的功能並提高性能,同時你可以專注於更重要的事情。

編輯
雖然我認爲總體來說要學會使用工具這樣的事情(我個人實體框架的粉絲,現在已成功地用它在幾個項目,並使用LINQ到SQL很重要在此之前),作爲學習練習來了解如何做到這一點仍然很有價值。我有經驗的ORM使用XML來定義數據模型,並使用XML文件上的代碼生成來創建類模型。 LINQ to SQL使用代碼生成的類上的自定義屬性來爲每個類和屬性定義源表和列,並在運行時反映將從SqlDataReader返回的數據映射到類對象上的屬性。無論使用「默認」還是「POCO」模板,實體框架的行爲可能會有所不同,但最終做的基本相同(使用反射將數據庫結果映射到類中的屬性),它只是可能使用或不使用自定義屬性來確定映射。我認爲NHibernate也是這樣做的。

+0

對不起,我是大多數這些技術的新手,但謝謝你,我會研究你提到的更多。 – 2011-06-02 19:54:09