這個函數的參數是應用程序對象實例列表,在函數中遍歷這個列表,對於每一個對象實例調用GetBindInfo函數獲得綁定信息,然後遍歷所有的對象屬性的綁定信息,這樣就可以拼湊出一個“Update Table Set 字段名1=屬性值1 , 字段名2=屬性值2 , 字段名3=屬性值3…”這樣的SQL語句。
我們還調用BindCondition函數來創建該SQL語句的Where子語句用於設置更新數據庫記錄的查詢條件。在BindCondition函數中,遍歷查找所有標記為關鍵字的屬性綁定信息,然後拼湊出一個“字段名1=屬性值1 and 字段名2=屬性值2 …”這樣的SQL語句,並調用PropertyInfo.GetValue函數來獲得關鍵字段屬性值。
這裡和InsertObjects函數類似,我們並沒有將對象實例的屬性值嵌入在SQL語句中,而是使用SQL命令參數的方式來保存對象實例的屬性值。
完整的用於更新數據庫記錄的SQL語句拼湊完畢後,我們就設置SQL命令對象,然後執行SQL語句,這樣就能根據對象來修改數據庫的記錄,然後我們設置累計的修改數據庫記錄的個數作為返回值後退出函數。
我們還在UpdateObjects的基礎上派生了一些其他函數用於豐富ORM框架的編程接口。
刪除數據
ORM框架定義了一個DeleteObjects函數用於刪除數據庫記錄,其主要代碼為
/// <summary>
/// 刪除若干條對象的數據
/// </summary>
/// <param name="Objects">對象列表</param>
/// <returns>刪除的記錄個數</returns>
public int DeleteObjects( System.Collections.IEnumerable Objects )
{
if( Objects == null )
{
throw new ArgumentNullException("Objects");
}
this.CheckBindInfo( Objects , true );
this.CheckConnetion();
int RecordCount = 0 ;
using( System.Data.IDbCommand cmd = myConnection.CreateCommand())
{
foreach( object obj in Objects )
{
TableBindInfo table = this.GetBindInfo( obj.GetType() );
// 拼湊SQL語句
System.Collections.ArrayList values = new System.Collections.ArrayList();
string strSQL = BuildCondition( obj , values );
strSQL = "Delete From " + FixTableName( table.TableName ) + " Where " + strSQL ;
// 設置SQL命令對象
cmd.Parameters.Clear();
cmd.CommandText = strSQL ;
foreach( object v in values )
{
System.Data.IDbDataParameter p = cmd.CreateParameter();
p.Value = v ;
cmd.Parameters.Add( p );
}
// 執行SQL,刪除記錄
RecordCount += cmd.ExecuteNonQuery();
}
}
return RecordCount ;
}