#眉標=Enterprise Library #副標=設計模型套件系列(12) #大標=極致Attribute Programming 使用Policy Injection Application Block(上) #作者=文/圖 王寧疆 ==<反灰>=========== [Policy("CertPolicy")] public class Service : System.Web.Services.WebService { } ================ ============= 程式1 ================ ==<反灰>=========== using System.Data; using System.Data.SqlClient; using Microsoft.Practices.EnterpriseLibrary.PolicyInjection.CallHandlers; using Microsoft.Practices.EnterpriseLibrary.Validation.Validators; ================ ============= 程式2 public class Model : MarshalByRefObject //讓類別繼承自MarshalByRefObject類別 { //定義資料庫連線資訊 const string conString ="Data Source=.;Initial Catalog=NORTHWIND;Integrated Security=True;"; public DataTable GetProducts(int SupplierID) //依據SupplierID查詢產品資訊的方法 { SqlConnection con = new SqlConnection(conString); //建立SqlConnection類別的物件 //依據SupplierID查詢產品資訊的SQL敘述 string selectString = "SELECT ProductID, ProductName, UnitPrice FROM Products WHERE SupplierID=@SupplierID"; SqlCommand cmd = new SqlCommand(selectString, con); //建立SqlCommand類別的物件 cmd.Parameters.AddWithValue("@SupplierID", SupplierID); //準備SupplierID參數的內容值 SqlDataAdapter da = new SqlDataAdapter(cmd); //建立SqlDataAdapter類別的物件 DataTable dt = new DataTable(); //建立DataTable類別的物件 da.Fill(dt); //執行查詢,將查詢的結果存放在DataTable類別的物件中 return dt; //傳回DataTable類別的物件 } //更新產品記錄內容的方法   [ValidationCallHandler] //加上資料驗証功能 public void UpdateProduct( int ProductID,     //限制ProductName參數必須是介於1~40個字元的字串     [StringLengthValidator(1, 40, MessageTemplate = "ProductName的長度必須是介於1~40個字元的字串")]     string ProductName,     [NotNullValidator(MessageTemplate="UnitPrice必須有內容值")]//限制UnitPrice參數必須有內容值     decimal UnitPrice) { SqlConnection con = new SqlConnection(conString); //建立SqlConnection類別的物件 string updateString = "UPDATE Products SET ProductName=@ProductName,UnitPrice=@UnitPrice " + "WHERE ProductID=@ProductID"; //更新產品記錄內容的SQL敘述 SqlCommand cmd = new SqlCommand(updateString, con); //建立SqlCommand類別的物件 cmd.Parameters.AddWithValue("@ProductName", ProductName); //準備ProductName參數的內容值 cmd.Parameters.AddWithValue("@UnitPrice", UnitPrice); //準備UnitPrice參數的內容值 cmd.Parameters.AddWithValue("@ProductId", ProductID); //準備ProductID參數的內容值 con.Open(); //開啟資料庫連線 cmd.ExecuteNonQuery(); //執行更新資料庫記錄的動作 con.Close(); //關閉資料庫連線 } public void DeleteProduct(int ProductID) //依據ProductID刪除產品記錄的方法 { SqlConnection con = new SqlConnection(conString); //建立SqlConnection類別的物件 string deleteString = "DELETE Products WHERE ProductID=@ProductID"; //刪除產品記錄的SQL敘述 SqlCommand cmd = new SqlCommand(deleteString, con); //建立SqlCommand類別的物件 cmd.Parameters.AddWithValue("@ProductId", ProductID); //準備ProductID參數的內容值 con.Open(); //開啟資料庫連線 cmd.ExecuteNonQuery(); //執行刪除資料庫記錄的動作 con.Close(); //關閉資料庫連線 } } ================ ==<反灰>=========== using Microsoft.Practices.EnterpriseLibrary.PolicyInjection.CallHandlers.Installers; using Microsoft.Practices.EnterpriseLibrary.Common.Configuration; using System.Configuration.Install; using Microsoft.Practices.EnterpriseLibrary.PolicyInjection; ================