国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項超值服

開通VIP
一步一步學(xué)Linq to sql(三):增刪改
示例數(shù)據(jù)庫
字段名
字段類型
允許空
字段說明
ID
uniqueidentifier
表主鍵字段
UserName
varchar(50)
留言用戶名
PostTime
datetime
留言時間
Message
varchar(400)
留言內(nèi)容
IsReplied
bit
留言是否回復(fù)
Reply
varchar(400)
留言管理員回復(fù)
在數(shù)據(jù)庫中創(chuàng)建一個名為GuestBook的數(shù)據(jù)庫,在里面創(chuàng)建一個tbGuestBook的表,結(jié)構(gòu)如上表。
生成實(shí)體類
右鍵點(diǎn)擊網(wǎng)站項目,選擇添加新項,然后選擇“Linq to sql Classes”,命名為GuestBook。然后打開App_Code里面的GuestBook.dbml。設(shè)計視圖上的文字提示你可以從服務(wù)器資源管理器或者攻擊箱拖動項到設(shè)計界面上來創(chuàng)建實(shí)體類。
那么,我們就在服務(wù)器資源管理器中創(chuàng)建一個指向GuestBook數(shù)據(jù)庫的數(shù)據(jù)連接,然后把tbGuestBook表拖動到GuestBook.dbml的設(shè)計視圖上,按CTRL+S保存。打開GuestBook.designer.cs可以發(fā)現(xiàn)系統(tǒng)自動創(chuàng)建了GuestBook數(shù)據(jù)庫中tbGuestBook表的映射,如下圖:
簡易留言簿
現(xiàn)在,我們就可以使用Linq to sql完成簡易留言簿了。實(shí)現(xiàn)以下功能:
l         發(fā)表留言(增)
l         查看留言(查)
l         管理員回復(fù)留言(改)
l         管理員刪除留言(刪除)
首先,創(chuàng)建一個Default.aspx,在頁面上加入一些控件:
<div>
姓名
<asp:TextBox ID="tb_UserName" runat="server"></asp:TextBox><br />
<br />
留言
<asp:TextBox ID="tb_Message" runat="server" Height="100px" TextMode="MultiLine" Width="300px"></asp:TextBox><br />
<br />
<asp:Button ID="btn_SendMessage" runat="server" Text="發(fā)表留言" OnClick="btn_SendMessage_Click" /><br />
<br />
<asp:Repeater ID="rpt_Message" runat="server">
<ItemTemplate>
<table width="600px" style="border:solid 1px #666666; font-size:10pt; background-color:#f0f0f0">
<tr>
<td align="left" width="400px">
<%# Eval("Message")%>
</td>
<td align="right" width="200px">
<%# Eval("PostTime")%> - <%# Eval("UserName")%>
</td>
</tr>
<tr>
<td colspan="2" align="right">
<hr width="300px" />
管理員回復(fù):<%# Eval("IsReplied").ToString() == "False" ? "暫無" : Eval("Reply")%>
</td>
</tr>
</table>
<br/>
</ItemTemplate>
</asp:Repeater>
</div>
你可能很難想象,使用Linq to sql進(jìn)行數(shù)據(jù)訪問會是這么簡單,后臺代碼:
public partial class _Default : System.Web.UI.Page
{
GuestBookDataContext ctx = new GuestBookDataContext("server=xxx;database=GuestBook;uid=xxx;pwd=xxx");
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
SetBind();
}
}
protected void btn_SendMessage_Click(object sender, EventArgs e)
{
tbGuestBook gb = new tbGuestBook();
gb.ID = Guid.NewGuid();
gb.UserName = tb_UserName.Text;
gb.Message = tb_Message.Text;
gb.IsReplied = false;
gb.PostTime = DateTime.Now;
ctx.tbGuestBooks.Add(gb);
ctx.SubmitChanges();
SetBind();
}
private void SetBind()
{
rpt_Message.DataSource = from gb in ctx.tbGuestBooks orderby gb.PostTime descending select gb;
rpt_Message.DataBind();
}
}
前面創(chuàng)建Linq to sql Classes的時候我們輸入名字GuestBook,系統(tǒng)就為我們自動創(chuàng)建了GuestBookDataContext(你也可以在GuestBook.Designer.cs中找到類定義)。在綁定的時候我們使用查詢句法查詢留言表中所有留言,按照發(fā)表時間倒序(天哪?這是數(shù)據(jù)訪問嗎?好像僅僅定義了一句SQL?。?。在發(fā)表留言按鈕中,我們?yōu)橐粋€tbGuestBook賦值,然后把它加入留言表,再提交更改,就這樣完成了記錄的插入。
運(yùn)行效果如下圖:
然后,再創(chuàng)建一個Admin.aspx,前臺代碼如下:
<div>
<asp:Repeater ID="rpt_Message" runat="server" OnItemCommand="rpt_Message_ItemCommand">
<ItemTemplate>
<table width="600px" style="border:solid 1px #666666; font-size:10pt; background-color:#f0f0f0">
<tr>
<td align="left" width="400px">
<%# Eval("Message")%>
</td>
<td align="right" width="200px">
<%# Eval("PostTime")%> - <%# Eval("UserName")%>
</td>
</tr>
<tr>
<td colspan="2" align="right">
<hr width="300px" />
<asp:Button ID="btn_DeleteMessage" runat="server" Text="刪除留言" CommandName="DeleteMessage" CommandArgument='<%# Eval("ID")%>'/>
管理員回復(fù):<asp:TextBox runat="server" ID="tb_Reply" TextMode="MultiLine" Width="300px" Text='<%# Eval("Reply")%>'/>
<asp:Button ID="btn_SendReply" runat="server" Text="發(fā)表回復(fù)" CommandName="SendReply" CommandArgument='<%# Eval("ID")%>'/>
</td>
</tr>
</table>
<br/>
</ItemTemplate>
</asp:Repeater>
</div>
后臺代碼:
public partial class Admin : System.Web.UI.Page
{
GuestBookDataContext ctx = new GuestBookDataContext("server=xxx;database=GuestBook;uid=xxx;pwd=xxx");
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
SetBind();
}
}
private void SetBind()
{
rpt_Message.DataSource = from gb in ctx.tbGuestBooks orderby gb.PostTime descending select gb;
rpt_Message.DataBind();
}
protected void rpt_Message_ItemCommand(object source, RepeaterCommandEventArgs e)
{
if (e.CommandName == "DeleteMessage")
{
StreamWriter sw = new StreamWriter(Server.MapPath("log.txt"), true);
ctx.Log = sw;
tbGuestBook gb = ctx.tbGuestBooks.Single(b => b.ID == new Guid(e.CommandArgument.ToString()));
ctx.tbGuestBooks.Remove(gb);
ctx.SubmitChanges();
SetBind();
sw.Close();
}
if (e.CommandName == "SendReply")
{
StreamWriter sw = new StreamWriter(Server.MapPath("log.txt"), true);
ctx.Log = sw;
tbGuestBook gb = ctx.tbGuestBooks.Single(b => b.ID == new Guid(e.CommandArgument.ToString()));
gb.Reply = ((TextBox)e.Item.FindControl("tb_Reply")).Text;
gb.IsReplied = true;
ctx.SubmitChanges();
SetBind();
sw.Close();
}
}
}
運(yùn)行效果如下圖:
在這里,我們通過Single方法獲取一條記錄,也就是一個tbGuestBook實(shí)例,更新了一些屬性后保存也就完成了改這個操作。刪除操作更簡單,只需要從表中移除對象。你是不是覺得好像不是在操作數(shù)據(jù)庫,像在操作內(nèi)存中的對象。
由于寫了日志,看看改和刪操作會是怎么樣的SQL?
UPDATE [dbo].[tbGuestBook]
SET [IsReplied] = @p4, [Reply] = @p5
WHERE ([ID] = @p0) AND ([UserName] = @p1) AND ([PostTime] = @p2) AND ([Message] = @p3) AND (NOT ([IsReplied] = 1)) AND ([Reply] IS NULL)
-- @p0: Input Guid (Size = 0; Prec = 0; Scale = 0) [00000000-0000-0000-0000-000000000000]
-- @p1: Input String (Size = 4; Prec = 0; Scale = 0) [ghgh]
-- @p2: Input DateTime (Size = 0; Prec = 0; Scale = 0) [2007-8-16 10:20:09]
-- @p3: Input String (Size = 3; Prec = 0; Scale = 0) [ghj]
-- @p4: Input Boolean (Size = 0; Prec = 0; Scale = 0) [True]
-- @p5: Input String (Size = 3; Prec = 0; Scale = 0) [qqq]
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.20706.1
DELETE FROM [dbo].[tbGuestBook] WHERE ([ID] = @p0) AND ([UserName] = @p1) AND ([PostTime] = @p2) AND ([Message] = @p3) AND (NOT ([IsReplied] = 1)) AND ([Reply] = @p4)
-- @p0: Input Guid (Size = 0; Prec = 0; Scale = 0) [158ec941-13ff-4093-bd8b-9fceae152171]
-- @p1: Input String (Size = 2; Prec = 0; Scale = 0) [44]
-- @p2: Input DateTime (Size = 0; Prec = 0; Scale = 0) [2007-8-16 9:56:19]
-- @p3: Input String (Size = 2; Prec = 0; Scale = 0) [44]
-- @p4: Input String (Size = 3; Prec = 0; Scale = 0) [222]
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.20706.1
今天就講到這里,下次將系統(tǒng)介紹查詢句法。
1
0
0(請您對文章做出評價)
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
一步一步學(xué)Linq to sql(四):查詢句法 - LoveCherry - 博客園
ASP產(chǎn)品二級分類代碼、帶數(shù)據(jù)庫的、可以后臺修改
Flash 與 Asp 的結(jié)合使用 洪越論壇
簡單的ASP.NET無刷新分頁
asp.net實(shí)現(xiàn)DataList與Repeater嵌套綁定的方法
后臺判斷GridView某列在前臺顯示信息
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服