close

上回提到,SubSonic就是為了避免開發人員需要在runtime才能知道程式是否撰寫錯誤而誕生的。
不過未解釋那些Class是做什麼用的。
用習慣DataSet或是DataTable的人,其實可以把SubSonic當作視同相同的東西
原先使用DataTable的人,可能會使用下列的方式取得資料
String xxxx = ds.Tables[0].Rows[0]["xxxx"].ToString();

xxxx意指欄位名稱,但撰寫程式的時候可能會因為打錯一個字,造成runtime的時候才能發現有Bug存在

如果說上一篇產生Schema是正確的,
先行引用
using SubSonic;    <--使用SubSonic物件而用的命名空間
using SubSonic.Generated; <--使用根據Schema產生的Class的命名空間(根據設定不同而不同)
2009-7-27 下午 12-58-28.png

在北風資料庫中有Employee的資料表。
輸入片段如下
2009-7-27 下午 12-53-44.png
仔細觀察EmployeeID,由於該欄位在資料庫中定義int型態,所以SubSonic會根據欄位型態產生相對應的Class
如果繼續輸入如下,
2009-7-27 下午 01-04-32.png
其實就很像是在Employee中新增一列的處理

如果大概知道SubSonic產生出來的Class的用途,那就繼續往下解說。

查詢範例,下圖示設計畫面
2009-7-27 上午 11-56-43.png
 

預期結果
1.查詢Employee的資料表
2.如果沒有輸入EmployeeID,則查出全部的資料
2.如果有輸入EmployeeID,則根據EmployeeID進行查詢
3.可輸入LastName、FastName進行模糊查詢
4.查詢結果依照LastName做降冪排序

使用內容包含
1.單一資料表查詢
2.條件查詢
3.模糊查詢
4.指定欄位排序

程式碼

protected void btnSearch_Click(object sender, EventArgs e)
{
 //產生新的Query
 Query MyQuery = Employee.CreateQuery();

 //指定變數EmployeeID
 //如果使用者有輸入的情況時,則指定EmployeeID進行查詢
 if (txtEmployeeID.Text != "")
 {
  MyQuery.AddWhere(Employee.Columns.EmployeeID, txtEmployeeID.Text);
 }

 //假如有輸入姓名,則進行模糊查詢
 if (txtFastName.Text.Replace("%", "").Trim() != "")
 {
  string FastName = "%" + txtFastName.Text.Replace("%", "").Trim() + "%";
  MyQuery.AddWhere(Employee.Columns.FirstName, Comparison.Like, FastName);
 }

 if (txtLastName.Text.Replace("%", "").Trim() != "")
 {
  string LastName = "%" + txtLastName.Text.Replace("%", "").Trim() + "%";
  MyQuery.AddWhere(Employee.Columns.LastName, Comparison.Like, LastName);
 }

 //指定排序方式
 MyQuery.ORDER_BY(Employee.Columns.LastName + " desc");

 //實體化一個空的Employee集合
 EmployeeCollection MyCollection = new EmployeeCollection();

 //使用查詢條件對資料庫進行查詢,並將查詢結果建立在IDataReader中
 IDataReader rdr = MyQuery.ExecuteReader();

 //將IDataReader的結果存入Employee集合,並關閉連線
 MyCollection.LoadAndCloseReader(rdr);

 //指定GridView的資料來源並且建立
 GridView1.DataSource = MyCollection;
 GridView1.DataBind();
}

 

直接查詢結果

2009-7-27 下午 12-49-55.png

模糊查詢結果

2009-7-27 下午 12-50-30.png

 

查詢篇,下回再解析~~

arrow
arrow
    全站熱搜

    gogo1119 發表在 痞客邦 留言(0) 人氣()