天天看點

CYQ.Data 輕量資料通路層(一) 概述

在很久很久以前。2007年底,我曾釋出過cyq.data.dll,那時的學術氛圍很濃,評論的也比較重

在那裡,我曾做過一些簡介與使用方法的幫助

在這個系列中,我将一步一步開源并講解實作的過程,由于文章進行編輯,日期變了

這裡先簡單介紹一下資料通路層的大體結構:

這裡先上一張主要的圖:

CYQ.Data 輕量資料通路層(一) 概述

該通路層主要分三類:

一.自定義table

1.自定義實作輕量級mdatatable,并實作idatareader接口,以便可以直接綁定到datagrid,repeater等控件

主要資料包括

自定義資料單元格:mdatacell

自定義資料資料列集合:mdatacolumns

自定義資料行:mdatarecord,繼承并實作idatarecord,以後在控件背景可以實作類型轉換,并實作與mdatarow的隐式轉換

2.資料主操作mdatarow,實作動态建構資料庫表架構,并緩存表架構,同時實作資料的增删改查

mdataresult是枚舉,傳回為mdatarow操作的結果類型

二.自定義的sql

1.主要自已簡化的sqlhelper,并結構log記錄出錯異常

datatype主要是資料庫類型和c#類型之間的轉換

proceduresql主要是一些存儲過程,可以實作讀取資料庫表架構及相應的分頁存儲過程

outputdata主要是提供生成資料庫的表與視圖與字段,會以枚舉的形式存在,本資料方問層,會以枚舉替代實體類的存在

三,cache類

主要是緩存相應的表架構

--------------------------------------

說明,在接下來的講解執行個體中,可能涉及到類的更名與移除

并會優化同時也會去掉一些多餘的代碼與函數

是以,本人會建立一個新的項目,重新寫一次最新的項目,并提供下載下傳

關于功能的可能更新,如下面的操作:

mdatarow mdr=new mdatarow(table.users);//table.v_users

mdr[users.username].value='cyq';

mdr.update("id=1");

mdr.close();

在這個示例中,如果users為資料庫,則users.username枚舉會直接轉成(int)users.username進行索引查詢

如果為v_users或為多表查詢的資料,則users.username枚舉會轉成users.username.tostring()進行周遊查詢

1.關于多表查詢中,不僅僅限于視圖,也支援建構的聯合查詢表,如:

string userstable="(select u.* from users u left join topic t on u.id=t.uid) v_users";

mdatarow mdr=new mdatarow(userstable);