資料庫操作(1.0.0.1)(續) (轉)

amyz發表於2007-08-17
資料庫操作(1.0.0.1)(續) (轉)[@more@]

 :namespace prefix = o ns = "urn:schemas--com::office" />

datamodel.xml

 

 

 

  * FROM Bank_Library WHERE bank_id = @bankId

 

 

 

 

 

  SELECT * FROM Bank_Library WHERE bank_id = 1

 

 

 

 

  SELECT * FROM Account

 

 

 

說明

1.  DataModel:根接點。

2.  Command:命令接點,代表一條命令語句;id命令編號,用來對命令進行編號,中將不使用;name命令的名稱,程式中透過這個名稱來;type命令的型別,有兩種取值(command,produce),代表是SQL語句還是過程。

3.  CommandString:命令的SQL語句或儲存過程的名稱,直接填入可以在查詢分析器中執行的SQL語句就可以。

4.  Param:引數結點,每個結點代表一個引數,id引數編號;name引數名稱,必須和上面結點中引用的一致;default引數的預設值;type引數的資料型別;size引數的資料長度;這些屬性的設定都應該和中的欄位一致。

 

配置檔案tableDefine.xml

 

 

 

 

 

 

 

 

說明:

1.  TableDefine:根結點。

2.  Table:表結點,代表一個資料庫表。alias表的別名,程式中引用;name表的真實名稱,和資料庫中的表名一致。

3.  Column:列結點,代表一列的定義。alias列的別名,程式中引用;name列的真實名稱,和資料庫中的列名一致;datatype列定義的資料型別;length列定義的長度;nullflag列是否允許為空的標誌;primarykey主鍵標誌;foreignkey外來鍵標誌;default預設值;autoadd自增標誌。

4.  資料庫中表的定義將透過程式直接匯入這個配置檔案中,至於表和表的關係,以後我會加上的。

 

Iase介面

 

此介面類定義了資料庫操作所公共的介面,所有針對不同的資料庫實現的資料庫操作類都應該遵從於這個介面,並且工廠(Factory)的應用,使得上層呼叫的時候,可以不需要考慮下面使用的特定的資料庫引擎。

 

目前:SQL查詢語句是事先寫定了放於配置檔案datamodel.xml中的,引數陣列中引數的順序和配置檔案中引數的順序保持一致。

我將進一步修改,把簡單的查詢語句自動生成,而不需要事先寫入XML檔案。

 

 

string GetSingle(string sqlStr, string [] vals);

Hashtable GetSingleRow(string sqlStr, string [] vals);

ArrayList GetMultiRow(string sqlStr, string [] vals);

void CreateItem(string itemName, string [] colsValueArray);

void ModifyItem(string itemName, string itemId, string [] colsNameArray, string [] colsValueArray);

void DeleteItem(string itemName, string itemId);

 

*  GetSingle():根據傳進去的資料庫操作的名稱(定義於配置檔案中)、引數陣列,取回一個字串型別的單值,比如:根據姓名取使用者的地址。

*  GetSingleRow():根據傳進去的資料庫操作的名稱(定義於配置檔案中)、引數陣列,取回資料庫表中的一行多列,結果按照欄位名、值的對應關係,存放於Hashtable中,方便於使用。比如:根據使用者姓名取出使用者的資訊,當有多個行返回的時候,取到資料集的第一行。

*  GetMultiRow():根據傳進去的資料庫操作的名稱(定義於配置檔案中)、引數陣列,取回資料庫表中的多行多列,取回的是一個陣列,陣列中的每個元素都是一個Hashtable,每個Hashtable儲存資料庫表中的一行多列。比如:取出1979年出生的所有的使用者列表,每個使用者存在於一個Hashtable中,取到的陣列中包含了所有符合條件的所有使用者列表。

*  CreateItem():根據傳進去的表名、要插入表的值陣列,生成INSERT語句,資料庫插入操作。注意:表明是一個別名,定義於配置檔案中,並不是真實的資料庫表名,中間有個隱射關係,這樣可以保證在資料庫表名改變的情況下不需要改變程式。列名也是同樣的處理;另外,要插入的值必須和配置檔案tableDefine.xml中定義的欄位順序一致,否則生成的語句會出錯。比如:向使用者表中插入一個新使用者。

*  ModifyItem():根據傳進去的表名、主鍵的值、要修改表的欄位陣列、值陣列,其中欄位陣列和值陣列必須一一對應,然後自動生成UPDATE語句。比如:根據使用者名稱,修改使用者表中使用者的地址、電話。

*  DeleteItem():根據傳進去的表名、主鍵的值,自動生成DELETE語句。比如:根據使用者名稱刪除使用者資料。

 

SqlDBase類

 

實現了IDBase介面,公共方法的實現和上面介紹的介面類一致,值得說明的是這個類提供了兩個構造器。

 

public SqlDBase(string conName)

public SqlDBase()

 

使用預設的資料庫,可以使用第二個構造器,如果使用其他的資料庫連線,則使用第一個構造器,引數和配置檔案SystemConfig.xml中資料庫連線的名稱對應,從而指不同的連線。

 

DbaseFactory類

 

這是一個工廠類,實現了工廠模式,目的是為了上層呼叫的時候,不需要關心使用的那個資料庫操作類,這取決於配置檔案中的設定。

 

public static IDBase GetDBaseUtility()

public static IDBase GetDBaseUtility(string conName)

{

  IDBase myDBaseUtil = null;

  if(Constant.Data_Base.Equals("SQLSERVER2000"))

  {

  myDBaseUtil = new SqlDBase(conName);

  }

  return myDBaseUtil;

}

 

兩個方法基本一致,引數只是為了指明使用哪個資料庫連線。

 

工廠Factory模式

 

根據配置檔案中指明的資料庫,返回相應的操作類,在這裡,如果配置中指定的資料庫為“SQLSERVER2000”,則返回SqlDBase類。

 

 

結束語

 

與資料庫相關的類的介紹就到這裡了,寫的過程中,自己都覺得很多地方沒有寫清楚,有興趣的朋友看了原始碼應該可以完全明白的,只是原始碼到目前還沒有完全完成,等完成以後一定發給大家,希望大家看了以後能給小弟一點指定,謝謝各位的關注。

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-963792/,如需轉載,請註明出處,否則將追究法律責任。

相關文章