CYQ.Data 轻量数据层之路 应用示例一 留言版(四)
繼上篇:CYQ.Data 輕量數(shù)據(jù)層之路 繼續(xù)狂熱升級(jí)(三)之后,本篇要進(jìn)入應(yīng)用示例介紹使用了:
?
為了使一篇文章就能介紹完整個(gè)示例,我選用了簡(jiǎn)單的:登陸+注冊(cè)+留言版本功能,來(lái)一步一步介紹如何使用的:
當(dāng)前環(huán)境是:VS2005+SQL2005
?
從數(shù)據(jù)庫(kù)說(shuō)起吧,我們創(chuàng)建一個(gè)新的數(shù)據(jù)庫(kù),起名叫:Message
接著新建兩個(gè)表:Users+Message,上圖:
為避免本篇節(jié)過(guò)長(zhǎng),本示例只選用最關(guān)鍵的字段了,大伙可以根據(jù)上面的圖自己創(chuàng)建數(shù)據(jù)庫(kù)與表。
接著我們新建網(wǎng)站來(lái)示例[這里沒(méi)選擇新建應(yīng)用程序,怕個(gè)別人沒(méi)裝sp1補(bǔ)丁,示例打不開(kāi)!]
接下來(lái)一步一腳印了:
1:新建網(wǎng)站項(xiàng)目,如起名叫:Cyq.Data.MessageDemoProject
新建完后,F5運(yùn)行,產(chǎn)生配置文件web.config先,接著在配置文件里添加數(shù)據(jù)庫(kù)鏈接:
<connectionStrings><add?name="Conn"?connectionString="Server=.;database=Message;uid=sa;pwd=123456"/>
</connectionStrings>
?
2:添加引用:CYQ.Data.dll
:
瀏覽定位選擇CYQ.Data.dll
?
3:生成分頁(yè)查詢(xún)存儲(chǔ)過(guò)程與枚舉:我們新建頁(yè)面:WriteOut.aspx,用于生成輸出:
A:生成分頁(yè)存儲(chǔ)過(guò)程:
protected?void?Page_Load(object?sender,?EventArgs?e){
????????//輸出分頁(yè)存儲(chǔ)過(guò)程
????????Response.Write(CYQ.Data.SQL.OutPutData.GetSelectBaseOutPutToHtmlForSql2005());
}
?
寫(xiě)好后,右鍵瀏覽該頁(yè)面,把輸出的信息“Ctrl+A -> Ctrl+C"全選->復(fù)制
我們把生成的分頁(yè)存儲(chǔ)過(guò)程到數(shù)據(jù)庫(kù)里執(zhí)行一下:
?
B:生成表枚舉
我們還是在當(dāng)前頁(yè)面的里敲代碼:
protected?void?Page_Load(object?sender,?EventArgs?e)????{
????????//輸出存儲(chǔ)過(guò)程
????????//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));
????}
?
我們注釋掉了生成存儲(chǔ)過(guò)程的,添加了生成表枚舉,說(shuō)明參數(shù):
TableType.U:指生成表枚舉TableType.V:指生成視圖枚舉
DiledDescriptionType.NoDescription:不生成注釋
DiledDescriptionType.Sql2005:生成注釋--對(duì)應(yīng)Sql?2005
DiledDescriptionType.Sql2000:生成注釋--對(duì)應(yīng)Sql?2000
備注:注釋信息取自數(shù)據(jù)庫(kù)字段的說(shuō)明,如果數(shù)據(jù)庫(kù)字段說(shuō)明沒(méi)寫(xiě)東西,生成的就是No?Descrpiotn
?
?
接著,我們新添加一個(gè)類(lèi):TableNames,來(lái)存放生成的枚舉信息:生成后的類(lèi)默認(rèn)會(huì)在App_Code文件夾下:
?
4:開(kāi)始項(xiàng)目:我們新建兩個(gè)頁(yè)面:登陸(Login.aspx);注冊(cè)(Reg.aspx);留言界面[默認(rèn)已有](Default.aspx)
A:注冊(cè)用戶(hù):界面如下圖,Html代碼大伙自己布局了:
如圖:只有用戶(hù)名和密碼:雙擊進(jìn)“提交注冊(cè)”按鈕事件里敲入以下代碼:
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?=?"用戶(hù)已存在!";
????????????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");
????????????}
????????}
????}
?
代碼不多,大伙看的懂我就不解釋了,注冊(cè)成功后轉(zhuǎn)向Default.aspx頁(yè)面!
?
B:登陸界面:截圖如下,界面加多了個(gè)鏈接到注冊(cè)頁(yè)面去了:
同樣雙擊“登陸”進(jìn)入后臺(tái)代碼如下:
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?=?"用戶(hù)密碼錯(cuò)誤!";
????????????action.Close();
????????}
????}
?
代碼同樣很簡(jiǎn)潔,登陸后記錄下Session,轉(zhuǎn)向Default.aspx頁(yè)面:
?
C:留言頁(yè)面:我們來(lái)看一下界面:[這里先清除下數(shù)據(jù)庫(kù)的數(shù)據(jù),重新注冊(cè)添加一點(diǎn)數(shù)據(jù)]
我先清除以前的舊數(shù)據(jù),數(shù)據(jù)庫(kù)SQL執(zhí)行一下語(yǔ)句:
TRUNCATE?TABLE?[Message]TRUNCATE?TABLE?Users
?
好,重新注冊(cè)下,留下言,上圖:
如上圖所示,整個(gè)頁(yè)面分為:
1:最左上角的歡迎2:三個(gè)列表[注冊(cè)用戶(hù)/我的留言/所有留言],分別使用GridView/DataList/Repeater綁定
3:右下角的提交留言
?
我們一個(gè)一個(gè)看代碼:
1:最左上角的歡迎:判斷沒(méi)登陸后就直接轉(zhuǎn)向登陸,如果登陸,直接用Session["ID"]填充數(shù)據(jù)
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?=?"讀取數(shù)據(jù)失敗!";
????????????}
????????????action.Close();
????????}
}
?
?
2:接下來(lái)三個(gè)列表的綁定:
protected?void?LoadUserListInfo()//GridView?綁定用戶(hù)注冊(cè)信息????{
????????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?綁定所有用戶(hù)留言
????{
????????MAction?action?=?new?MAction(CustomerSQL.Message);
????????rptMessage.DataSource?=?action.Select();
????????rptMessage.DataBind();
????????action.Close();
????}
?
最后一個(gè)綁定所有用戶(hù)留言時(shí),涉及兩個(gè)表關(guān)聯(lián),所以傳入的表名是CustomerSQL.Message,這個(gè)是怎么來(lái)的?
我App_Code文件夾下我新建一個(gè)類(lèi):CustomerSQL,來(lái)統(tǒng)一管理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方法里加載上面的幾個(gè)方法:
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:還有個(gè)退出呢:
protected?void?btnLogout_Click(object?sender,?EventArgs?e){
????????Session["ID"]?=?null;
????????Response.Redirect("Login.aspx");
}
?
?
至此,一個(gè)注冊(cè)+登陸+留言功能的小項(xiàng)目,就輕松寫(xiě)完了,拿上面的代碼和你以前寫(xiě)的代碼比較下,感覺(jué)哪個(gè)簡(jiǎn)潔方便實(shí)用呢?
如果用你目前使用的方法寫(xiě)一個(gè)一樣的,需要花費(fèi)的時(shí)間和精力又是多少?歡迎拍磚留言!
?
OK,本示例應(yīng)用到此結(jié)束了,最后提供Demo下載[內(nèi)附數(shù)據(jù)庫(kù)腳本]:點(diǎn)擊下載
版權(quán)聲明:本文原創(chuàng)發(fā)表于博客園,作者為路過(guò)秋天,原文鏈接:
http://www.cnblogs.com/cyq1162/archive/2010/08/18/1801518.html
總結(jié)
以上是生活随笔為你收集整理的CYQ.Data 轻量数据层之路 应用示例一 留言版(四)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: [NOIP2005] 提高组 洛谷P10
- 下一篇: pheatmap, gplots hea