public int UpdateObjects(IEnumerable objects)
{
if (objects == null) throw new ArgumentNullException("objects");
CheckBindInfo(objects, true); CheckConnection();
int count = 0;
using (IDbCommand cmd = conn.CreateCommand())
{
foreach (object obj in objects)
{
TableBindInfo table = GetBindInfo(obj.GetType());
ArrayList values = new ArrayList();
StringBuilder sql = new StringBuilder();
// 建構 SET 子句
foreach (FieldBindInfo f in table.Fields)
{
object val = f.Property.GetValue(obj, null);
if (sql.Length > 0) sql.Append(",\n");
sql.Append($"{FixFieldName(f.FieldName)} = ?");
values.Add(f.ToDataBase(val));
}
sql.Insert(0, $"UPDATE {FixTableName(table.TableName)} SET ");
// 建構 WHERE 子句
string where = BuildCondition(obj, values); // 同 DeleteObjects
sql.Append($" WHERE {where}");
// 執行
cmd.Parameters.Clear();
cmd.CommandText = sql.ToString();
foreach (object v in values)
{
IDbDataParameter p = cmd.CreateParameter();
cmd.Parameters.Add(p); p.Value = v;
}
count += cmd.ExecuteNonQuery();
}
}
return count;
}
values 列表,順序與 SQL 佔位符對應。BuildCondition 重用刪除邏輯,確保 WHERE 條件一致性。strLastSQL 快取機制 (略) 減少重複設定 CommandText/Parameters 開銷。在 UpdateObjects 基礎上衍生單一物件更新、指定表名更新等多載方法,豐富框架 API。