共用方式為


逐步解說:將驗證加入至 N-Tier 資料應用程式

「驗證」(Validate) 資料的過程會確認資料物件中輸入的值 (例如,DataTables 或 LINQ to SQL 類別) 符合物件結構描述中的條件約束 (Constraint)。驗證過程也會確保該值符合為應用程式建立的規則。先驗證資料再將更新傳送至基礎資料庫是減少錯誤的良好做法。它同時也會降低應用程式與資料庫之間的可能往返次數。

這個逐步解說提供逐步指示,說明如何將驗證加入至 n 層應用程式 (在逐步解說:建立 N-Tier 資料應用程式主題中建立的方案)。

在此逐步解說中,您將學習如何執行下列工作:

必要條件

若要完成這個逐步解說,您需要下列項目:

注意事項注意事項

您的電腦可能會在下列說明中,以不同名稱或位置顯示某些 Visual Studio 使用者介面項目。您所擁有的 Visual Studio 版本以及使用的設定會決定這些項目。如需詳細資訊,請參閱 Visual Studio 設定

開啟 NTierWalkthrough 方案

若要開啟 NTierWalkthrough 方案

加入驗證以檢查個別資料行變更期間的資料

這個程序會加入驗證,以確認新訂單中之 OrderDate 資料行的值是設定為目前日期或更早的日期。這個應用程式需要 OrderDate 資料行的日期不可以晚於今天,因此不允許新的訂單。

加入驗證以確認 OrderDate 資料行中輸入的值

  1. 在 [方案總管] 中按兩下 DataAccessTier 專案中的 NorthwindDataSet.xsd 檔案,在 建立和編輯具型別資料集中開啟資料集。

  2. 在設計工具中,按兩下 Orders 資料表的 OrderDate 資料行。這個動作會建立 ColumnChanging 事件處理常式。

    注意事項注意事項

    [DataSet 設計工具] 不會自動為這個 C# 事件建立事件處理常式。本程序稍後會包含在 C# 中處理事件所需的程式碼。本範例會先建立 SampleColumnChangingEvent 並使其在 EndInit 方法中訂閱 ColumnChanging 事件。

  3. 加入程式碼,以確認 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 資料行的值變更為無效的日期。

若要測試應用程式

  1. 按 F5。

  2. Customers 和 Orders 資料表中的資料會出現在表單上。

  3. 在內含訂單的 DataGridView 中,將任何記錄的 OrderDate 資料行值變更為明天的日期。

  4. 移離資料列,以接受變更。

    驗證會失敗,而內含無效值的 OrderDate 儲存格中會出現錯誤圖示。

  5. 將滑鼠指標放在錯誤圖示上,以查看驗證錯誤。

  6. 關閉表單

後續步驟

根據應用程式需求的不同,在加入 n 層應用程式的驗證之後,您可能會想執行幾個步驟。例如,您可以進行下列作業讓這個應用程式發揮更強的功能:

請參閱

概念

Visual Studio 2012 中資料應用程式開發的新功能

其他資源

使用多層式架構應用程式中的資料集

階層式更新

存取 Visual Studio 中的資料