CYQ.Data 轻量数据层之路 应用示例一 留言版(四)
繼上篇:CYQ.Data 輕量數據層之路 繼續狂熱升級(三)之后,本篇要進入應用示例介紹使用了:
?
為了使一篇文章就能介紹完整個示例,我選用了簡單的:登陸+注冊+留言版本功能,來一步一步介紹如何使用的:
當前環境是:VS2005+SQL2005
?
從數據庫說起吧,我們創建一個新的數據庫,起名叫:Message
接著新建兩個表:Users+Message,上圖:
為避免本篇節過長,本示例只選用最關鍵的字段了,大伙可以根據上面的圖自己創建數據庫與表。
接著我們新建網站來示例[這里沒選擇新建應用程序,怕個別人沒裝sp1補丁,示例打不開!]
接下來一步一腳印了:
1:新建網站項目,如起名叫:Cyq.Data.MessageDemoProject
新建完后,F5運行,產生配置文件web.config先,接著在配置文件里添加數據庫鏈接:
<connectionStrings><add?name="Conn"?connectionString="Server=.;database=Message;uid=sa;pwd=123456"/>
</connectionStrings>
?
2:添加引用:CYQ.Data.dll
:
瀏覽定位選擇CYQ.Data.dll
?
3:生成分頁查詢存儲過程與枚舉:我們新建頁面:WriteOut.aspx,用于生成輸出:
A:生成分頁存儲過程:
protected?void?Page_Load(object?sender,?EventArgs?e){
????????//輸出分頁存儲過程
????????Response.Write(CYQ.Data.SQL.OutPutData.GetSelectBaseOutPutToHtmlForSql2005());
}
?
寫好后,右鍵瀏覽該頁面,把輸出的信息“Ctrl+A -> Ctrl+C"全選->復制
我們把生成的分頁存儲過程到數據庫里執行一下:
?
B:生成表枚舉
我們還是在當前頁面的里敲代碼:
protected?void?Page_Load(object?sender,?EventArgs?e)????{
????????//輸出存儲過程
????????//Response.Write(CYQ.Data.SQL.OutPutData.GetSelectBaseOutPutToHtmlForSql2005());
????????//輸出表視圖枚舉:
????????CYQ.Data.SQL.OutPutData?data?=?new?CYQ.Data.SQL.OutPutData();
????????Response.Write(data.OutPutAllTableEnum(CYQ.Data.SQL.OutPutData.TableType.U,?CYQ.Data.SQL.OutPutData.FiledDescriptionType.Sql2005));
????}
?
我們注釋掉了生成存儲過程的,添加了生成表枚舉,說明參數:
TableType.U:指生成表枚舉TableType.V:指生成視圖枚舉
DiledDescriptionType.NoDescription:不生成注釋
DiledDescriptionType.Sql2005:生成注釋--對應Sql?2005
DiledDescriptionType.Sql2000:生成注釋--對應Sql?2000
備注:注釋信息取自數據庫字段的說明,如果數據庫字段說明沒寫東西,生成的就是No?Descrpiotn
?
?
接著,我們新添加一個類:TableNames,來存放生成的枚舉信息:生成后的類默認會在App_Code文件夾下:
?
4:開始項目:我們新建兩個頁面:登陸(Login.aspx);注冊(Reg.aspx);留言界面[默認已有](Default.aspx)
A:注冊用戶:界面如下圖,Html代碼大伙自己布局了:
如圖:只有用戶名和密碼:雙擊進“提交注冊”按鈕事件里敲入以下代碼:
protected?void?btnReg_Click(object?sender,?EventArgs?e)????{
????????if?(txtPassword.Text?!=?txtPasswordAgain.Text)
????????{
????????????lbMsg.Text?=?"兩次密碼不一致!";
????????????return;
????????}
????????MAction?action?=?new?MAction(TableNames.Users);
????????if?(action.GetCount(string.Format("UserName='{0}'",?txtUserName.Text.Trim()))?>?0)
????????{
????????????lbMsg.Text?=?"用戶已存在!";
????????????action.Close();
????????}
????????else
????????{
????????????action.GetFrom(txtUserName);
????????????action.GetFrom(txtPassword);
????????????if?(action.Insert())
????????????{
????????????????Session["ID"]?=?action.Get<int>(Users.ID);
????????????????action.Close();
????????????????Response.Redirect("Default.aspx");
????????????}
????????}
????}
?
代碼不多,大伙看的懂我就不解釋了,注冊成功后轉向Default.aspx頁面!
?
B:登陸界面:截圖如下,界面加多了個鏈接到注冊頁面去了:
同樣雙擊“登陸”進入后臺代碼如下:
protected?void?btnLogin_Click(object?sender,?EventArgs?e)????{
????????MAction?action?=?new?MAction(TableNames.Users);
????????if(action.Fill(string.Format("UserName='{0}'?and?Password='{1}'",?txtUserName.Text.Trim(),?txtPassword.Text.Trim())))
????????{
????????????Session["ID"]?=?action.Get<int>(Users.ID);
????????????action.Close();
????????????Response.Redirect("Default.aspx");
????????}
????????else
????????{
????????????lbMsg.Text?=?"用戶密碼錯誤!";
????????????action.Close();
????????}
????}
?
代碼同樣很簡潔,登陸后記錄下Session,轉向Default.aspx頁面:
?
C:留言頁面:我們來看一下界面:[這里先清除下數據庫的數據,重新注冊添加一點數據]
我先清除以前的舊數據,數據庫SQL執行一下語句:
TRUNCATE?TABLE?[Message]TRUNCATE?TABLE?Users
?
好,重新注冊下,留下言,上圖:
如上圖所示,整個頁面分為:
1:最左上角的歡迎2:三個列表[注冊用戶/我的留言/所有留言],分別使用GridView/DataList/Repeater綁定
3:右下角的提交留言
?
我們一個一個看代碼:
1:最左上角的歡迎:判斷沒登陸后就直接轉向登陸,如果登陸,直接用Session["ID"]填充數據
protected?void?LoadMyInfo(){
????????if?(Session["ID"]?==?null)
????????{
????????????Response.Redirect("Login.aspx");
????????}
????????else
????????{
????????????MAction?action?=?new?MAction(TableNames.Users);
????????????if?(action.Fill(Session["ID"]))
????????????{
????????????????action.SetTo(labUserName);
????????????}
????????????else
????????????{
????????????????labUserName.Text?=?"讀取數據失敗!";
????????????}
????????????action.Close();
????????}
}
?
?
2:接下來三個列表的綁定:
protected?void?LoadUserListInfo()//GridView?綁定用戶注冊信息????{
????????MAction?action?=?new?MAction(TableNames.Users);
????????gvUsers.DataSource?=?action.Select();
????????gvUsers.DataBind();
????????action.Close();
????}
????protected?void?LoadMyMessageList()//DataList?綁定我的留言
????{
????????int?count;
????????MAction?action?=?new?MAction(TableNames.Message);
????????dalMyMessage.DataSource?=?action.Select(1,?10,?string.Format("UserID={0}",?Session["ID"]),?out?count);
????????dalMyMessage.DataBind();
????????action.Close();
????}
????protected?void?LoadAllMessageList()//Repeater?綁定所有用戶留言
????{
????????MAction?action?=?new?MAction(CustomerSQL.Message);
????????rptMessage.DataSource?=?action.Select();
????????rptMessage.DataBind();
????????action.Close();
????}
?
最后一個綁定所有用戶留言時,涉及兩個表關聯,所以傳入的表名是CustomerSQL.Message,這個是怎么來的?
我App_Code文件夾下我新建一個類:CustomerSQL,來統一管理SQL:
public?class?CustomerSQL{
????public?const?string?Message?=?"(select?m.*,u.UserName?from?Message?m?left?join?Users?u?on?m.UserID=u.ID)?v";
}
?
最后,我們需要在Page_Load方法里加載上面的幾個方法:
protected?void?Page_Load(object?sender,?EventArgs?e){
????????LoadMyInfo();
????????LoadUserListInfo();
????????LoadMyMessageList();
????????LoadAllMessageList();
}
?
?
3:提交留言:提交完后,自我刷新一下界面。
protected?void?btnSubmit_Click(object?sender,?EventArgs?e){
????????MAction?action?=?new?MAction(TableNames.Message);
????????action.GetFrom(txtBody);
????????action.Set(Message.UserID,?Session["ID"]);
????????action.Insert();
????????action.Close();
????????Response.Redirect(Request.RawUrl);
}
?
?
4:還有個退出呢:
protected?void?btnLogout_Click(object?sender,?EventArgs?e){
????????Session["ID"]?=?null;
????????Response.Redirect("Login.aspx");
}
?
?
至此,一個注冊+登陸+留言功能的小項目,就輕松寫完了,拿上面的代碼和你以前寫的代碼比較下,感覺哪個簡潔方便實用呢?
如果用你目前使用的方法寫一個一樣的,需要花費的時間和精力又是多少?歡迎拍磚留言!
?
OK,本示例應用到此結束了,最后提供Demo下載[內附數據庫腳本]:點擊下載
版權聲明:本文原創發表于博客園,作者為路過秋天,原文鏈接:
http://www.cnblogs.com/cyq1162/archive/2010/08/18/1801518.html
總結
以上是生活随笔為你收集整理的CYQ.Data 轻量数据层之路 应用示例一 留言版(四)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [NOIP2005] 提高组 洛谷P10
- 下一篇: pheatmap, gplots hea