為了避免暫時的走火入魔,隻好先寫寫别的系列文章,關于象棋系列後續情況,先暫緩小些天先了。
從開始到現在,感覺寫過那麼四五個資料架構了,然而懷念的,還是第一次寫時的非實體型架構!!!
兩年後09年時,開啟了封存兩年的舊文,在編輯時,不知是不是部落格園bug,文章的日期發生變化了,成了09年的文章!
寫到一半時,适逢出差,月後回來,發現找不找原來示例源碼了,于是勿勿補上一篇,算是小小完結了一下。
近些天突然在電腦上發現了原來的示例源碼,運作了一下,發現那個自定義Table的還沒能實作綁定清單控件-_-!
今天,花了N小時重構了以前的代碼,删除了沒用到的重截,優化代碼,調整結構,重新上路,堅持把路走完!!!
1. CyQ.Data 介紹
類庫名稱空間介紹,上圖:

大體情況說明:
1:Table檔案夾下:自定義實作綁定MDataTable,遠離DataTable
2:Cache檔案夾下:用于并緩存表結構資訊
3:Action檔案夾下:主要操作對象
4:SQL檔案夾下:
DataType:提供C#資料類型和資料庫類型的轉換等相關資訊
SQLHelper:本人精簡資料庫操作類:
Log:用于記錄資料操作異常資訊
ProcedureSql:,内置查詢資料表結構查詢語句
OutPutData:内置sql 2000和sql 2005分頁存儲過程;同時提供幫助類自動生成表或視圖枚舉
再附說明:
本DLL原則上采取Row[索引]形式進行通路的,為了友善敲點代碼,提供用枚舉傳參方法,内部會自動将枚舉轉成int,進行索引通路!
對于本系列,請讀者盡量不與生成[實體類+反射組合查詢語句]的型架構做相關的比較讨論!
功能特點如下:
l 支援SQL Server 2000/2005/2008 .Net 2.0。其它資料庫,不支援
l 隻需要配置資料庫連結,例如:
<connectionStrings>
<add name="Conn" connectionString="Server=.;database=CQSpace;uid=sa;pwd=123456"/>
</connectionStrings>
l 簡單易用,簡單使用見于下面介紹。
ps:由于本次調整代碼量多,是以不知會不會改出什麼問題,目前本機測試暫沒發現問題,如發現bug請下面留言。
2. CyQ.Data 使用說明
該工具基于.NET 2.0,是以不能用在.NET 1.1的工程。 首先給你的工程添加Cyq.Data引用即可!
項目開始之前,請調用Cyq.Data.SQL.OutPutData下的靜态方法,生成相應資料的分頁存儲過程如:
//生成sql2005帶分頁的存儲過程
Response.Write(CYQ.Data.SQL.OutPutData.GetSelectBaseOutPutToHtmlForSql2005());
//生成sql2000帶分頁的存儲過程
Response.Write(CYQ.Data.SQL.OutPutData.GetSelectBaseOutPutToHtmlForSql2000());
接着使用OutPutData生成資料庫表或視圖枚舉:
//生成枚舉之後,Copy到一個類檔案即可,[需要實體化,因為需要關聯資料庫,構造函數不傳參,預設取Conn裡的連結]
CYQ.Data.SQL.OutPutData write = new CYQ.Data.SQL.OutPutData();
//輸出表枚舉
Response.Write(write.OutPutAllTableEnum(CYQ.Data.SQL.OutPutData.TableType.U, CYQ.Data.SQL.OutPutData.FiledDescriptionType.NoDescription));
//輸出視圖枚舉
Response.Write(write.OutPutAllTableEnum(CYQ.Data.SQL.OutPutData.TableType.V, CYQ.Data.SQL.OutPutData.FiledDescriptionType.NoDescription));
當然裡面也有提供對單表的生成方法了。
接着開始項目實戰了,下面示例已經過測試:
1:單行資料填充:
MAction action = new MAction(TableNames.CQ_Album);
if (action.Fill(1))
{
lbText.Text = action.Data[CQ_Album.AlbumName].Value.ToString();
action.Close();
}
2:資料更新:
MAction action = new MAction(TableNames.CQ_Album);
if (action.Fill(1))
action.Data[CQ_Album.AlbumName].Value = txtAlbumName.Text;
action.Update();
action.Close();
資料更新方法二:
action.Data[CQ_Album.AlbumName].Value = txtAlbumName.Text;
action.Update("id=1");
action.Close();
3:資料删除:
MAction action = new MAction(TableNames.CQ_Album);
action.Delete(2);
action.Close();
資料删除方法二:
action.DeleteByWhere("id=2");
4:資料查詢與綁定:
查詢所有:
gvTable.DataSource = action.Select();
gvTable.DataBind();
分頁查詢:
int rowCount;
gvTable.DataSource = action.Select(1, 10, "id>10", out rowCount);
gvTable.DataBind();
5:多表怎麼搞定?
A:視圖方式,将多表查詢放到資料庫裡成視圖,情況和單表一樣使用;
B:自定義查詢語句如:
string table = "(select A.*,B.Name from CQ_Album A left join CQ_UserInfo U on A.UserID=U.UserID) v";
MAction action = new MAction(table);
int rowCount;
gvTable.DataSource = action.Select(1, 10, "id>1", out rowCount);
當然了,你隻要把自定義的sql語句,全放一邊去統一管理就行了,界面上就不要出現sql語句了!
附加:
本人從新的實體架構上引入SetTo與GetFrom方法,下一篇改造版本将從索引賦/取值中解放,敬請關注:
//原索引設定值:
action.Data[CQ_Album.AlbumName].Value = txtAlbumName.Text;
//改進後成:
action.GetFrom(txtAlbumName);
//原索引讀值:
txtAlbumName.Text=action.Data[CQ_Album.AlbumName].Value
action.SetTo(txtAlbumName);
OK,本開篇就點到為止,歡迎讀者留言!
版權聲明:本文原創發表于部落格園,作者為路過秋天,原文連結:
http://www.cnblogs.com/cyq1162/archive/2010/08/12/1797744.html