共用方式為


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

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

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

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

必要條件

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

注意事項注意事項

在下列指示的某些 Visual Studio 使用者介面項目中,您的電腦可能會顯示不同的名稱或位置:您所擁有的 Visual Studio 版本以及使用的設定會決定這些項目。如需詳細資訊,請參閱 Customizing Development Settings in 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 中的資料