程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#發現之旅第十一講 使用反射和特性構造自己的ORM框架(下)(3)

C#發現之旅第十一講 使用反射和特性構造自己的ORM框架(下)(3)

編輯:關於C語言

這個函數的參數是應用程序對象實例列表,在函數中遍歷這個列表,對於每一個對象實例調用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 ;
}
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved