2026-05-30 擴展 DAO 方法與異常處理
2026-05-30 擴展 DAO 方法與異常處理
我:
第 8 步:持久化數據 我已完成,
接下來:
添加更多 DAO 方法:如更新和刪除包裹的方法。
進一步測試資料庫操作:更新單元測試來確保 DAO 操作的正確性,可以使用一些工具模擬資料庫。
加入異常處理:在資料庫操作中加入異常處理機制,以處理可能出現的資料庫連接失敗等問題。
要怎麼做呢? 請出作業
GPT:
作業說明:擴展 DAO 方法與異常處理
第 1 部分:添加更多 DAO 方法
更新包裹的方法:
- 在您的 DAO 類別中添加一個名為
updatePackage的方法,用於更新包裹的狀態或其他屬性。 - 方法應接收一個
Package物件(包含更新後的所有屬性),並根據TrackingNumber來執行更新。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18public 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;
}
}
}- 在您的 DAO 類別中添加一個名為
刪除包裹的方法:
- 添加一個名為
deletePackage的方法,用於根據TrackingNumber刪除包裹記錄。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15public 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 部分:進一步測試資料庫操作
更新單元測試:
- 更新現有的單元測試來測試
updatePackage和deletePackage方法。 - 您可以使用
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[]
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);
}
[]
public void DeletePackage_ShouldReturnTrue_WhenPackageIsDeleted()
{
// Arrange
var trackingNumber = "12345ABC";
var dao = new PackageDao();
// Act
bool result = dao.DeletePackage(trackingNumber);
// Assert
Assert.IsTrue(result);
}- 更新現有的單元測試來測試
第 3 部分:加入異常處理
資料庫操作中的異常處理:
- 在每個 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
27public 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;
}
}- 在每個 DAO 方法中加入
全域異常處理:
- 在應用程式中設置全域異常處理器,用於捕捉未預期的異常,防止應用程式崩潰。
已為您準備了擴展 DAO 方法和異常處理的作業內容,包含新增的更新和刪除方法、更新測試案例及異常處理邏輯。您可以根據這些指導進一步完善代碼。如果有任何問題,隨時向我詢問!
我:
這是第9步嗎?
是的,這是第 9 步的後續工作內容。第 9 步涉及持久化數據,這裡的作業進一步擴展了 DAO 方法,添加了更新和刪除包裹的功能,以及進一步測試和處理異常的建議。
接下來,您可以實施這些更新並執行相應的單元測試來驗證功能。如果還有任何問題或需要更多幫助,隨時告訴我!