(一). 序幕
1.在實際的軟件開發中大部分都是團隊合作開發的,經常會出現這種情況,一個程序員只設計好數據庫,由另一個程序員寫程式.這就出現一個問題. 設計數據庫的程序員 設計數據庫字段名稱命名習慣 與 寫程式碼程序員數據庫命名習慣有些不同. 例如: 數據庫程序員對 客戶名稱習慣命名"customername" ,而寫程式代碼程序員習慣命名"cusname",這樣,寫程式代碼程序員在使用時,可能會大量使用類似:dataset.row[0]["cusname"],這樣在更新時就會報錯,如果大量出現這種情況的話,不但增加開發時修改bug所耗時間,而且更重要的是會使整個項目各代碼頁面很難統一.
2.可以實現客戶端命名不受數據庫的約束. 例如數據庫中兩個表中的兩個名稱字段分別為: customername和projectname; 客戶端在相關界面,命名字段時沒必要知道是哪個表中字段的名稱,直接寫name就可以了.
此文章就是解決上面兩點的要求.
(二). 解決方法
1.
其實sqldataadapter就已經實現此功能了. 它可以實現列映射,即將數據庫的列程序員自定義的列對應起來. 舉例說明:
設有個客戶表 customer ,下面將對其內字段進行映射,具體 代碼如下:
sqldataadapter myadapter = new dqldataadapter();
datatablemapping mymapping = new datatablemapping();
mymapping = myadapter.tablemappings.add("customer","customer"); //告訴橋接器并添加映射對象
mymapping.columnmappings.add("customerid","id"); //實際數據庫中字段名為: customerid, 在實際 //對其操作時可以用id字段名稱. 例如:
// ds.table["customer"].row[0]["id"]; //就表示客戶編號列
mymapping.columnmappings.add("customername","name");
mymapping.columnmappings.add("customeremail","email");
myadapter.fill(ds,"customer");
以上在使用時只需用映射后的操作就可以啦. 映射后的這段名稱可以自定義. sqldataadapter會將它們
對應起來,即將它們看作是同一列.
2 .解決站點統一問題 :
a.
假設在十個頁面中都用了代碼:
ds.table["customer"].row[0]["customername"];
現在由于某原因,要修改數據庫表字段,需要將物理數據庫中的字段:customername改為: cusname基于現在的情況,還要到這十個頁面中去,找出所有的:
ds.table["customer"].row[0]["customername"];
并將其改為: ds.table["customer"].row[0]["cusname"];
呵,就改一個字段就帶來這么多麻煩,如果改好多個表的多個字段的話呢,時間消耗多少和維護難易程度就可想而知了. 下面就解決這個問題.
b.
定義一個類,并繼承dataset. 代碼如下:
public class customer : dataset
{
public enum field
{
id = 0; //這些列與 dataset內部表獲得數據后實際字段名稱對應要正確. 這里自己控制
name = 1;
email = 2;
password = 3;
}
}
ok, 最后一步了,使用方法是這樣的:
ds.table["customer"].row[0][customer.field.id]; //取某列值
比起: ds.table["customer"].row[0]["customerid"];
方便多了吧?
這樣,如果物理數據庫字段怎么修改,程式代碼根本不用修改(連這個類本身也不用修改).
謝謝閱讀!
新聞熱點
疑難解答