首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 發現之旅第十二講:快速 ORM 框架更新資料機制實作

     編輯:關於C語言

更新資料流程概覽

快速 ORM 框架在更新資料庫時,會先建立 IDbCommand 物件,再呼叫實體類別的 FillUpdateCommand 方法設定 SQL 與參數,最後執行命令完成更新。本文以 DB_Employees 為例,展示生成的更新代碼結構。

生成的 FillUpdateCommand 代碼結構

public override int FillUpdateCommand(IDbCommand cmd, object objRecord) {
    if (cmd == null) throw new ArgumentNullException("cmd");
    if (objRecord == null) throw new ArgumentNullException("objRecord");
    DB_Employees myRecord = objRecord as DB_Employees;
    if (myRecord == null) throw new ArgumentException("must type 'DB_Employees'");

    cmd.CommandText = @"UPDATE Employees SET 
        EmployeeID = ?, LastName = ?, FirstName = ?, ... , Sex = ? 
        WHERE EmployeeID = ?";
    cmd.Parameters.Clear();
    IDbDataParameter parameter = null;

    parameter = cmd.CreateParameter();
    parameter.Value = myRecord.EmployeeID;
    cmd.Parameters.Add(parameter);

    parameter = cmd.CreateParameter();
    parameter.Value = myRecord.BirthDate.ToString("yyyy-MM-dd");
    cmd.Parameters.Add(parameter);
    // ... 其他屬性依序加入參數 ...
    parameter = cmd.CreateParameter();
    parameter.Value = myRecord.Sex;
    cmd.Parameters.Add(parameter);

    // WHERE 條件參數(主鍵)
    parameter = cmd.CreateParameter();
    parameter.Value = myRecord.EmployeeID;
    cmd.Parameters.Add(parameter);

    return 22; // 參數總數
}

關鍵設計重點

  1. 參數驗證:確保命令物件與實體物件非 null,且型別正確。
  2. 參數化 SQL:所有欄位值皆透過參數傳遞,防止 SQL 注入。
  3. 日期格式化:BirthDate 以 yyyy-MM-dd 格式輸出,符合資料庫預期。
  4. 主鍵重複參數:SET 子句與 WHERE 條件皆需主鍵值,故參數列表中主鍵出現兩次。
  5. 回傳參數計數:框架可據此驗證參數綁定完整性。

擴充性說明

此模式適用於任何實體類別,代碼生成器會依據屬性與 BindFieldAttribute 自動產生對應邏輯,開發者無需手寫重複的 CRUD 代碼。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved