#眉標=Enterprise Library、ASP.NET、Software Factory #副標=設計模型套件系列(21) #大標=建置大型線上交易處理功能的網站 #作者=文/圖 王寧疆 ============= Web Client Software Factory安裝建置步驟 1. Guidance Automation Extensions - February 2008 Release。 2. Guidance Automation Extensions for Visual Studio 2008 and Visual Studio 2008 Service Pack 1 Update。 3. Web Client Software Factory。 4. Guidance Automation Toolkit。 ================ ===<反灰>============= ================ ===<反灰>============= public class Supplier { private int m_SupplierID; public int SupplierID { get { return m_SupplierID; } set { m_SupplierID = value; } } //以下省略 } ================ ===<反灰>============= using WCSFWebSite.Suppliers.Entities; using System.Collections.Generic; ================ ===<反灰>============= public interface ISuppliersController { void UpdateSupplier(Supplier supplier); IList GetSuppliers(); } ================ ===<反灰>============= using WCSFWebSite.Suppliers.Entities; using System.Collections.Generic; using System.Data.SqlClient; using System.Data; ================ ===<反灰>============= public class SuppliersController : ISuppliersController { //資料庫連線資訊 string strConn = "Data Source=.;Initial Catalog=Northwind;Integrated Security=true"; public void UpdateSupplier(Supplier supplier) //負責查詢供應商資料的方法 { //更新供應商資訊的SQL敘述 string strSQL = "Update Suppliers set CompanyName=@CompanyName, " + "ContactName=@ContactName, ContactTitle=@ContactTitle," + " Address=@Address, City=@City, Region=@Region, " + "PostalCode=@PostalCode, Country=@Country, Phone=@Phone, " + "Fax=@Fax, HomePage=@HomePage where SupplierID=@SupplierID"; SqlConnection conn = new SqlConnection(strConn); //建立SqlConnection類別的物件 SqlCommand cmd = new SqlCommand(strSQL, conn); //建立SqlCommand類別的物件 cmd.CommandType = CommandType.Text; //設定SqlCommand類別的物件的CommandType屬性 cmd.Parameters.AddWithValue("@CompanyName", supplier.CompanyName); //設定CompanyName參數的內容值 cmd.Parameters.AddWithValue("@ContactName", supplier.ContactName); //設定ContactName參數的內容值 cmd.Parameters.AddWithValue("@ContactTitle", supplier.ContactTitle); //設定ContactTitle參數的內容值 cmd.Parameters.AddWithValue("@Address", supplier.Address); //設定Address參數的內容值 cmd.Parameters.AddWithValue("@City", supplier.City); //設定City參數的內容值 cmd.Parameters.AddWithValue("@Region", supplier.Region != null?supplier.Region : "--"); //設定Region參數的內容值 cmd.Parameters.AddWithValue("@PostalCode", supplier.PostalCode); //設定PostalCode參數的內容值 cmd.Parameters.AddWithValue("@Country", supplier.Country); //設定Country參數的內容值 cmd.Parameters.AddWithValue("@Phone", supplier.Phone); //設定Phone參數的內容值 cmd.Parameters.AddWithValue("@Fax", supplier.Fax != null ? supplier.Fax : "--"); //設定Fax參數的內容值 cmd.Parameters.AddWithValue("@HomePage", supplier.HomePage != null ? supplier.HomePage:"--");//設定HomePage參數的內容值 cmd.Parameters.AddWithValue("@SupplierID", supplier.SupplierID); //設定SupplierID參數的內容值 conn.Open(); //開啟資料庫連線 cmd.ExecuteNonQuery(); //執行更新記錄的工作 cmd.Dispose(); //丟棄SqlCommand類別的物件 conn.Close(); //關閉資料庫連線 conn.Dispose(); //丟棄SqlConnection類別的物件 } public IList GetSuppliers() //負責更新供應商資料的方法 { List suppliers = new List(); //建立List集合類別的物件 string strSQL = "Select * from Suppliers"; //查詢供應商資訊的SQL敘述 SqlDataAdapter da = new SqlDataAdapter(strSQL, strConn); //建立SqlDataAdapter類別的物件 DataSet ds = new DataSet(); //建立DataSet類別的物件 da.Fill(ds); //執行查詢,將查詢的結果存入DataSet類別的物件 foreach (DataRow dr in ds.Tables[0].Rows) //取出查詢得到的每一筆記錄 { Supplier s = new Supplier(); //建立Supplier類別的物件 s.SupplierID = Convert.ToInt32(dr["SupplierID"]); //填入SupplierID屬性的內容值 s.CompanyName = Convert.ToString(dr["CompanyName"]); //填入CompanyName屬性的內容值 s.ContactName = Convert.ToString(dr["ContactName"]); //填入ContactName屬性的內容值 s.ContactTitle = Convert.ToString(dr["ContactTitle"]); //填入ContactTitle屬性的內容值 s.Address = Convert.ToString(dr["Address"]); //填入Address屬性的內容值 s.City = Convert.ToString(dr["City"]); //填入City屬性的內容值 s.Region = Convert.ToString(dr["Region"]); //填入Region屬性的內容值 s.PostalCode = Convert.ToString(dr["PostalCode"]); //填入PostalCode屬性的內容值 s.Country = Convert.ToString(dr["Country"]); //填入Country屬性的內容值 s.Phone = Convert.ToString(dr["Phone"]); //填入Phone屬性的內容值 s.Fax = Convert.ToString(dr["Fax"]); //填入Fax屬性的內容值 s.HomePage = Convert.ToString(dr["HomePage"]); //填入HomePage屬性的內容值 suppliers.Add(s); //將Supplier類別的物件加入到List集合類別的物件 } return suppliers; //傳回List集合類別的物件 } } ================ ===<反灰>============= using WCSFWebSite.Suppliers.Entities; ================ ===<反灰>============= public interface IViewSuppliersView { IList Suppliers { set; } //宣告所以實作此介面的View都必須製作的屬性 } ================ ===<反灰>============= using WCSFWebSite.Suppliers.Entities; ================ ===<反灰>============= private ISuppliersController _controller; public ViewSuppliersPresenter([CreateNew] ISuppliersController controller) { _controller = controller; } ================ ===<反灰>============= public void OnCustomerUpdated(Supplier supplier) //更新供應商資料的方法 { _controller.UpdateSupplier(supplier); //呼叫Controller類別的物件的UpdateSupplier方法 } ================ ===<反灰>============= public override void OnViewLoaded() { View.Suppliers = _controller.GetSuppliers(); //呼叫Controller類別的物件的GetSuppliers方法 } ================ ===<反灰>============= <%@ Register Assembly="Microsoft.Practices.Web.UI.WebControls" Namespace="Microsoft.Practices.Web.UI.WebControls" TagPrefix="pp" %> ================ ===<反灰>============= ================ ===<反灰>============= protected void Suppliers_Updated(object sender, ObjectContainerDataSourceStatusEventArgs e) //更新供應商資訊的方法 { _presenter.OnSupplierUpdated((Supplier)e.Instance); //呼叫_presenter物件的OnSupplierUpdated方法 } public System.Collections.Generic.IList Suppliers //名稱為Suppliers的屬性 { set { dsSuppliers.DataSource = value; //將屬性內容值設定給ObjectContainerDataSource控制項當做DataSource屬性的內容值 } } ================