2026-05-30 擴展 DAO 方法與異常處理

2026-05-30 擴展 DAO 方法與異常處理

我:
第 8 步:持久化數據 我已完成,
接下來:
添加更多 DAO 方法:如更新和刪除包裹的方法。
進一步測試資料庫操作:更新單元測試來確保 DAO 操作的正確性,可以使用一些工具模擬資料庫。
加入異常處理:在資料庫操作中加入異常處理機制,以處理可能出現的資料庫連接失敗等問題。
要怎麼做呢? 請出作業

GPT:
作業說明:擴展 DAO 方法與異常處理

第 1 部分:添加更多 DAO 方法

  1. 更新包裹的方法

    • 在您的 DAO 類別中添加一個名為 updatePackage 的方法,用於更新包裹的狀態或其他屬性。
    • 方法應接收一個 Package 物件(包含更新後的所有屬性),並根據 TrackingNumber 來執行更新。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    public bool UpdatePackage(Package package)
    {
    string query = "UPDATE Packages SET Sender = @Sender, Recipient = @Recipient, Status = @Status WHERE TrackingNumber = @TrackingNumber";
    using (var connection = new SqlConnection(connectionString))
    {
    using (var command = new SqlCommand(query, connection))
    {
    command.Parameters.AddWithValue("@Sender", package.Sender);
    command.Parameters.AddWithValue("@Recipient", package.Recipient);
    command.Parameters.AddWithValue("@Status", package.Status);
    command.Parameters.AddWithValue("@TrackingNumber", package.TrackingNumber);

    connection.Open();
    int rowsAffected = command.ExecuteNonQuery();
    return rowsAffected > 0;
    }
    }
    }
  2. 刪除包裹的方法

    • 添加一個名為 deletePackage 的方法,用於根據 TrackingNumber 刪除包裹記錄。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    public bool DeletePackage(string trackingNumber)
    {
    string query = "DELETE FROM Packages WHERE TrackingNumber = @TrackingNumber";
    using (var connection = new SqlConnection(connectionString))
    {
    using (var command = new SqlCommand(query, connection))
    {
    command.Parameters.AddWithValue("@TrackingNumber", trackingNumber);

    connection.Open();
    int rowsAffected = command.ExecuteNonQuery();
    return rowsAffected > 0;
    }
    }
    }

第 2 部分:進一步測試資料庫操作

  1. 更新單元測試

    • 更新現有的單元測試來測試 updatePackagedeletePackage 方法。
    • 您可以使用 Moq 等模擬工具來模擬資料庫連接和操作,以確保您的 DAO 在沒有實際資料庫的情況下也能進行測試。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    [TestMethod]
    public void UpdatePackage_ShouldReturnTrue_WhenPackageIsUpdated()
    {
    // Arrange
    var package = new Package { TrackingNumber = "12345ABC", Sender = "NewSender", Recipient = "NewRecipient", Status = "Delivered" };
    var dao = new PackageDao();

    // Act
    bool result = dao.UpdatePackage(package);

    // Assert
    Assert.IsTrue(result);
    }

    [TestMethod]
    public void DeletePackage_ShouldReturnTrue_WhenPackageIsDeleted()
    {
    // Arrange
    var trackingNumber = "12345ABC";
    var dao = new PackageDao();

    // Act
    bool result = dao.DeletePackage(trackingNumber);

    // Assert
    Assert.IsTrue(result);
    }

第 3 部分:加入異常處理

  1. 資料庫操作中的異常處理

    • 在每個 DAO 方法中加入 try-catch 塊,以便在發生異常時能夠捕捉並處理,例如資料庫連接失敗或 SQL 語句執行失敗。
    • 可以記錄異常訊息,並根據需要返回錯誤碼或自定義的異常類型。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    public bool UpdatePackage(Package package)
    {
    string query = "UPDATE Packages SET Sender = @Sender, Recipient = @Recipient, Status = @Status WHERE TrackingNumber = @TrackingNumber";
    try
    {
    using (var connection = new SqlConnection(connectionString))
    {
    using (var command = new SqlCommand(query, connection))
    {
    command.Parameters.AddWithValue("@Sender", package.Sender);
    command.Parameters.AddWithValue("@Recipient", package.Recipient);
    command.Parameters.AddWithValue("@Status", package.Status);
    command.Parameters.AddWithValue("@TrackingNumber", package.TrackingNumber);

    connection.Open();
    int rowsAffected = command.ExecuteNonQuery();
    return rowsAffected > 0;
    }
    }
    }
    catch (SqlException ex)
    {
    // 記錄異常訊息並處理
    Console.WriteLine("An error occurred while updating the package: " + ex.Message);
    return false;
    }
    }
  2. 全域異常處理

    • 在應用程式中設置全域異常處理器,用於捕捉未預期的異常,防止應用程式崩潰。

已為您準備了擴展 DAO 方法和異常處理的作業內容,包含新增的更新和刪除方法、更新測試案例及異常處理邏輯。您可以根據這些指導進一步完善代碼。如果有任何問題,隨時向我詢問!

我:
這是第9步嗎?
是的,這是第 9 步的後續工作內容。第 9 步涉及持久化數據,這裡的作業進一步擴展了 DAO 方法,添加了更新和刪除包裹的功能,以及進一步測試和處理異常的建議。

接下來,您可以實施這些更新並執行相應的單元測試來驗證功能。如果還有任何問題或需要更多幫助,隨時告訴我!