天天看點

CYQ.Data 輕量資料層之路 開篇介紹(一)

為了避免暫時的走火入魔,隻好先寫寫别的系列文章,關于象棋系列後續情況,先暫緩小些天先了。

從開始到現在,感覺寫過那麼四五個資料架構了,然而懷念的,還是第一次寫時的非實體型架構!!!

兩年後09年時,開啟了封存兩年的舊文,在編輯時,不知是不是部落格園bug,文章的日期發生變化了,成了09年的文章!

寫到一半時,适逢出差,月後回來,發現找不找原來示例源碼了,于是勿勿補上一篇,算是小小完結了一下。

近些天突然在電腦上發現了原來的示例源碼,運作了一下,發現那個自定義Table的還沒能實作綁定清單控件-_-!

今天,花了N小時重構了以前的代碼,删除了沒用到的重截,優化代碼,調整結構,重新上路,堅持把路走完!!!

1. CyQ.Data 介紹

類庫名稱空間介紹,上圖:

CYQ.Data 輕量資料層之路 開篇介紹(一)

大體情況說明:

CYQ.Data 輕量資料層之路 開篇介紹(一)
CYQ.Data 輕量資料層之路 開篇介紹(一)

1:Table檔案夾下:自定義實作綁定MDataTable,遠離DataTable

2:Cache檔案夾下:用于并緩存表結構資訊

3:Action檔案夾下:主要操作對象

4:SQL檔案夾下:

DataType:提供C#資料類型和資料庫類型的轉換等相關資訊

SQLHelper:本人精簡資料庫操作類:

Log:用于記錄資料操作異常資訊

ProcedureSql:,内置查詢資料表結構查詢語句

OutPutData:内置sql 2000和sql 2005分頁存儲過程;同時提供幫助類自動生成表或視圖枚舉

CYQ.Data 輕量資料層之路 開篇介紹(一)

再附說明:

本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下的靜态方法,生成相應資料的分頁存儲過程如:

CYQ.Data 輕量資料層之路 開篇介紹(一)

//生成sql2005帶分頁的存儲過程

Response.Write(CYQ.Data.SQL.OutPutData.GetSelectBaseOutPutToHtmlForSql2005());

//生成sql2000帶分頁的存儲過程

Response.Write(CYQ.Data.SQL.OutPutData.GetSelectBaseOutPutToHtmlForSql2000());

接着使用OutPutData生成資料庫表或視圖枚舉:

CYQ.Data 輕量資料層之路 開篇介紹(一)
CYQ.Data 輕量資料層之路 開篇介紹(一)

//生成枚舉之後,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));

CYQ.Data 輕量資料層之路 開篇介紹(一)

當然裡面也有提供對單表的生成方法了。

接着開始項目實戰了,下面示例已經過測試:

1:單行資料填充:

CYQ.Data 輕量資料層之路 開篇介紹(一)

  MAction action = new MAction(TableNames.CQ_Album);

  if (action.Fill(1))

  {

      lbText.Text = action.Data[CQ_Album.AlbumName].Value.ToString();

      action.Close();

  }

CYQ.Data 輕量資料層之路 開篇介紹(一)

2:資料更新:

CYQ.Data 輕量資料層之路 開篇介紹(一)

 MAction action = new MAction(TableNames.CQ_Album);

 if (action.Fill(1))

       action.Data[CQ_Album.AlbumName].Value = txtAlbumName.Text;

       action.Update();

       action.Close();

CYQ.Data 輕量資料層之路 開篇介紹(一)

資料更新方法二:

 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:自定義查詢語句如:

CYQ.Data 輕量資料層之路 開篇介紹(一)
CYQ.Data 輕量資料層之路 開篇介紹(一)

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);

CYQ.Data 輕量資料層之路 開篇介紹(一)

 當然了,你隻要把自定義的sql語句,全放一邊去統一管理就行了,界面上就不要出現sql語句了!

附加:

本人從新的實體架構上引入SetTo與GetFrom方法,下一篇改造版本将從索引賦/取值中解放,敬請關注:

CYQ.Data 輕量資料層之路 開篇介紹(一)
CYQ.Data 輕量資料層之路 開篇介紹(一)

//原索引設定值:  

action.Data[CQ_Album.AlbumName].Value = txtAlbumName.Text;  

//改進後成:  

action.GetFrom(txtAlbumName);  

//原索引讀值: 

txtAlbumName.Text=action.Data[CQ_Album.AlbumName].Value  

action.SetTo(txtAlbumName);  

CYQ.Data 輕量資料層之路 開篇介紹(一)

OK,本開篇就點到為止,歡迎讀者留言!

版權聲明:本文原創發表于部落格園,作者為路過秋天,原文連結:

http://www.cnblogs.com/cyq1162/archive/2010/08/12/1797744.html