逐步解說:將驗證加入至 N-Tier 資料應用程式
「驗證」(Validate) 資料的過程會確認資料物件中輸入的值 (例如,DataTables 或 LINQ to SQL 類別) 符合物件結構描述中的條件約束 (Constraint)。驗證過程也會確保該值符合為應用程式建立的規則。先驗證資料再將更新傳送至基礎資料庫是減少錯誤的良好做法。它同時也會降低應用程式與資料庫之間的可能往返次數。
這個逐步解說提供逐步指示,說明如何將驗證加入至 n 層應用程式 (在逐步解說:建立 N-Tier 資料應用程式主題中建立的方案)。
在此逐步解說中,您將學習如何執行下列工作:
使用 建立和編輯具型別資料集 自動產生部分類別。
加入程式碼,以在個別資料行的值變更時執行驗證。
必要條件
若要完成這個逐步解說,您需要下列項目:
在逐步解說:建立 N-Tier 資料應用程式中建立的方案和相關專案。
Northwind 範例資料庫的存取權。如需詳細資訊,請參閱 HOW TO:安裝範例資料庫。
注意事項 |
---|
您的電腦可能會在下列說明中,以不同名稱或位置顯示某些 Visual Studio 使用者介面項目。您所擁有的 Visual Studio 版本以及使用的設定會決定這些項目。如需詳細資訊,請參閱 Visual Studio 設定。 |
開啟 NTierWalkthrough 方案
若要開啟 NTierWalkthrough 方案
指向 [檔案] 功能表上的 [開啟],然後按一下 [專案/方案],再巡覽至 NTierWalkthrough.sln 檔案的位置。
注意事項 NTierWalkthrough.sln 檔案是在逐步解說:建立 N-Tier 資料應用程式主題中建立,它是完成這個逐步解說的必要條件。如果您還沒完成逐步解說:建立 N-Tier 資料應用程式主題,請先完成該主題,並在完成時儲存所有專案。
加入驗證以檢查個別資料行變更期間的資料
這個程序會加入驗證,以確認新訂單中之 OrderDate 資料行的值是設定為目前日期或更早的日期。這個應用程式需要 OrderDate 資料行的日期不可以晚於今天,因此不允許新的訂單。
加入驗證以確認 OrderDate 資料行中輸入的值
在 [方案總管] 中按兩下 DataAccessTier 專案中的 NorthwindDataSet.xsd 檔案,在 建立和編輯具型別資料集中開啟資料集。
在設計工具中,按兩下 Orders 資料表的 OrderDate 資料行。這個動作會建立 ColumnChanging 事件處理常式。
注意事項 [DataSet 設計工具] 不會自動為這個 C# 事件建立事件處理常式。本程序稍後會包含在 C# 中處理事件所需的程式碼。本範例會先建立 SampleColumnChangingEvent 並使其在 EndInit 方法中訂閱 ColumnChanging 事件。
加入程式碼,以確認 OrderDate 資料行的 e.ProposedValue 包含目前的日期或更早的日期。如果建議值無效,請設定資料行以指出它包含錯誤。
下列程式碼範例會驗證 OrderDate 資料行是否包含目前的日期或更早的日期。如果 OrderDate 值晚於今天的日期,則會將 OrderDate 資料行設定為錯誤。如果 OrderDate 是今天或更早的日期,則 Else 子句會清除錯誤。
請將下列 Visual Basic 程式碼貼上至 ColumnChanging 事件處理常式。如為 C# 程式碼,則請貼上至 OrdersDataTable 部分類別宣告。
If (e.Column.ColumnName = Me.OrderDateColumn.ColumnName) Then If CType(e.ProposedValue, DateTime) > Today Then e.Row.SetColumnError(e.Column, "OrderDate cannot be in the future") Else e.Row.SetColumnError(e.Column, "") End If End If
// Replace the NorthwindDataSet partial class with the following: public partial class NorthwindDataSet { partial class OrdersDataTable { public override void EndInit() { base.EndInit(); // Configure the ColumnChanging event // to call the SampleColumnChangingEvent method. ColumnChanging += SampleColumnChangingEvent; } public void SampleColumnChangingEvent(object sender, System.Data.DataColumnChangeEventArgs e) { if (e.Column.ColumnName == OrderDateColumn.ColumnName) { if ((System.DateTime)e.ProposedValue > System.DateTime.Today) { e.Row.SetColumnError("OrderDate", " OrderDate cannot be in the future"); } else { e.Row.SetColumnError("OrderDate", ""); } } } } }
測試應用程式
若要測試應用程式,請將 OrderDate 資料行的值變更為無效的日期。
若要測試應用程式
按 F5。
Customers 和 Orders 資料表中的資料會出現在表單上。
在內含訂單的 DataGridView 中,將任何記錄的 OrderDate 資料行值變更為明天的日期。
移離資料列,以接受變更。
驗證會失敗,而內含無效值的 OrderDate 儲存格中會出現錯誤圖示。
將滑鼠指標放在錯誤圖示上,以查看驗證錯誤。
關閉表單
後續步驟
根據應用程式需求的不同,在加入 n 層應用程式的驗證之後,您可能會想執行幾個步驟。例如,您可以進行下列作業讓這個應用程式發揮更強的功能:
- 加入驗證,以在整筆記錄變更時確認變更。如需詳細資訊,請參閱 HOW TO:將驗證加入 N-Tier 資料集。
請參閱
概念
Visual Studio 2012 中資料應用程式開發的新功能