#眉標=Enterprise Library #副標=設計模型套件系列(11) #大標=資料驗証機制 ─ Validation Application Block(上) #作者=文/圖 王寧疆 ==<灰>=========== public class Product { private string productCode; [StringLengthValidator(1, 10)] public string ProductCode { get { return productCode; } } // ... } ================ ==<灰>=========== Microsoft.Practices.EnterpriseLibrary.Validation.dll Microsoft.Practices.EnterpriseLibrary..Common.dll ================ ==<灰>=========== using Microsoft.Practices.EnterpriseLibrary.Validation; using Microsoft.Practices.EnterpriseLibrary.Validation.Validators; ================ ==<灰>=========== public class Product { public int ProductID; public string ProductName; public int SupplierID; public int CategoryID; public string QuantityPerUnit; public decimal UnitPrice; public int UnitsInStock; public int UnitsOnOrder; public int ReorderLevel; public bool Discontinued; } ================ ============= 程式1 ================ ============= 程式2 dbProducts dbp = new dbProducts(); //建立dbProducts類別的物件 Product p = new Product(); //建立Product類別的物件 p.ProductName = txtProductName.Text; //填入ProductName p.SupplierID=int.Parse(txtSupplierID.Text); //填入SupplierID p.CategoryID=int.Parse(txtCategoryID.Text); //填入CategoryID p.QuantityPerUnit=txtQuantityPerUnit.Text; //填入QuantityPerUnit p.UnitPrice=decimal.Parse(txtUnitPrice.Text); //填入UnitPrice p.UnitsInStock=Int16.Parse(txtUnitsInStock.Text); //填入UnitsInStock p.UnitsOnOrder=Int16.Parse(txtUnitsOnOrder.Text); //填入UnitsOnOrder p.ReorderLevel=Int16.Parse(txtReorderLevel.Text); //填入ReorderLevel p.Discontinued=(txtDiscontinued.Text.Equals("True")?true:false); //填入Discontinued lbMessage.Text=dbp.UpdateProduct(p); //呼叫dbProducts類別的UpdateProduct方 //法,並將結果顯示在網頁上的Label控制項 ================ ============= 程式3 public string UpdateProduct(Product p) { ValidationResults results = Validation.Validate(p, "ProductRuleSet"); //利用web.config設定檔中名稱為ProductRuleSet的驗証規則 //驗証Product類別的物件的內容是否正確 if (results.IsValid) //如果資料通過驗証 { string strSQL = "Update Products set ProductName=@ProductName, SupplierID=@SupplierID, " + "CategoryID=@CategoryID, QuantityPerUnit=@QuantityPerUnit, " + "UnitPrice=@UnitPrice, UnitsInStock=@UnitsInStock, UnitsOnOrder=" + "@UnitsOnOrder, ReorderLevel=@ReorderLevel, Discontinued=@Discontinued " + "where ProductID=@ProductID"; //準備更新資料庫記錄的SQL敘述 SqlConnection conn = new SqlConnection(strConn); //建立SqlConnection類別的物件 SqlCommand cmd = new SqlCommand(strSQL, conn); //建立SqlCommand類別的物件 cmd.CommandType = CommandType.Text; //設定SqlCommand物件的CommandType屬性 cmd.Parameters.AddWithValue("@ProductID", p.ProductID); //準備@ProductID參數的內容值 cmd.Parameters.AddWithValue("@ProductName", p.ProductName);/準備@ProductName參數的內容值 cmd.Parameters.AddWithValue("@SupplierID", p.SupplierID); //準備@SupplierID參數的內容值 cmd.Parameters.AddWithValue("@CategoryID", p.CategoryID); //準備@CategoryID參數的內容值 cmd.Parameters.AddWithValue("@QuantityPerUnit", p.QuantityPerUnit); //準備@QuantityPerUnit參數的內容值 cmd.Parameters.AddWithValue("@UnitPrice", p.UnitPrice); //準備@UnitPrice參數的內容值 cmd.Parameters.AddWithValue("@UnitsInStock", p.UnitsInStock); //準備@UnitsInStock參數的內容值 cmd.Parameters.AddWithValue("@UnitsOnOrder", p.UnitsOnOrder); //準備@UnitsInStock參數的內容值 cmd.Parameters.AddWithValue("@ReorderLevel", p.ReorderLevel); //準備@ReorderLevel參數的內容值 cmd.Parameters.AddWithValue("@Discontinued", p.Discontinued); //準備@Discontinued參數的內容值 conn.Open(); //開啟資料庫連線 cmd.ExecuteNonQuery(); //執行更新資料庫記錄的動作 cmd.Dispose(); //丟棄SqlCommand類別的物件 conn.Close(); //關閉資料庫連線 conn.Dispose(); //丟棄SqlConnection類別的物件 return "更新成功!"; //傳回更新成功的訊息 } Else //如果資料驗証失敗 { StringBuilder sb = new StringBuilder(); //建立StringBuilder類別的物件 foreach (ValidationResult result in results) //取出驗証失敗的錯誤訊息 { sb.Append(String.Format("- {0}:{1}
", result.Key,result.Message)); //加入到StringBuilder類別的物件中 } return sb.ToString(); //傳回StringBuilder類別的物件轉型成字串的結果 } } ================