下列是幾個查用的範例
1.單表查詢,使用條件、排序的方式進行查詢
//基本型 EmployeeCollection MyCollection = new EmployeeCollection(); return MyCollection; |
2.透過SQL語法查詢,參數的部分建議透過Parameter,避免發生SQL Injection
//SQL語法 cmd.AddParameter("@EmployeeID", ""); EmployeeCollection MyCollection = new EmployeeCollection(); MyCollection.LoadAndCloseReader(rdr); return MyCollection; |
3.類似LINQ型的查詢(2.1版本以後支援)
SqlQuery MyQuery = EmployeeCollection MyCollection = new EmployeeCollection(); return MyCollection; |
此類型更詳細的範例可參考
http://subsonicproject.com/docs/Simple_Query_Tool
上述3種方法的結果是相同的,但有其他衍生的缺點
1.只能對單一表查詢
2.欄位必須全部取出處理
雖然說方法3可以選擇欄位和Join其他資料表,
但最終在轉換IList的時候也會因為Class的欄位與查詢結果的欄位無法對應,造成轉換失敗。
面對此問題採用了兩種方法可以處理
1.利用.NET關鍵字partial擴充SubSonic產生的Class,查詢後轉DataSet(DataTable),並一個一個塞入。
2.使用View處理,SubSonic也會對View產生Class使用,只是View的管理上必須更小心謹慎
目前我們公司是採用2的方式去克服這個問題,
只是View已經建到多的有點誇張了~沒管理好,不知道哪些功能使用到這些View。
但我這邊還是覺得透過第二種方式去掩飾這個問題會好很多~
沒意外的話,下回就是Insert、Update、Delete還有store procedure