中文字幕日韩一区二区_国产一区二区av_国产毛片av_久久久久国产一区_色婷婷电影_国产一区二区精品

一步一步學(xué)Linq to sql(三):增刪改

系列文章導(dǎo)航:

一步一步學(xué)Linq to sql(一):預(yù)備知識(shí)

一步一步學(xué)Linq to sql(二):DataContext與實(shí)體

一步一步學(xué)Linq to sql(三):增刪改

一步一步學(xué)Linq to sql(四):查詢句法

一步一步學(xué)Linq to sql(五):存儲(chǔ)過(guò)程

一步一步學(xué)Linq to sql(六):探究特性

一步一步學(xué)Linq to sql(七):并發(fā)與事務(wù)

一步一步學(xué)Linq to sql(八):繼承與關(guān)系

一步一步學(xué)Linq to sql(九):其它補(bǔ)充

一步一步學(xué)Linq to sql(十):分層構(gòu)架的例子


示例數(shù)據(jù)庫(kù)

字段名

字段類型

允許空

字段說(shuō)明

ID

uniqueidentifier

 

表主鍵字段

UserName

varchar(50)

 

留言用戶名

PostTime

datetime

 

留言時(shí)間

Message

varchar(400)

留言內(nèi)容

IsReplied

bit

 

留言是否回復(fù)

Reply

varchar(400)

留言管理員回復(fù)

       在數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)名為GuestBook的數(shù)據(jù)庫(kù),在里面創(chuàng)建一個(gè)tbGuestBook的表,結(jié)構(gòu)如上表。

生成實(shí)體類

       右鍵點(diǎn)擊網(wǎng)站項(xiàng)目,選擇添加新項(xiàng),然后選擇“Linq to sql Classes”,命名為GuestBook。然后打開(kāi)App_Code里面的GuestBook.dbml。設(shè)計(jì)視圖上的文字提示你可以從服務(wù)器資源管理器或者攻擊箱拖動(dòng)項(xiàng)到設(shè)計(jì)界面上來(lái)創(chuàng)建實(shí)體類。

       那么,我們就在服務(wù)器資源管理器中創(chuàng)建一個(gè)指向GuestBook數(shù)據(jù)庫(kù)的數(shù)據(jù)連接,然后把tbGuestBook表拖動(dòng)到GuestBook.dbml的設(shè)計(jì)視圖上,按CTRL+S保存。打開(kāi)GuestBook.designer.cs可以發(fā)現(xiàn)系統(tǒng)自動(dòng)創(chuàng)建了GuestBook數(shù)據(jù)庫(kù)中tbGuestBook表的映射,如下圖:


系列文章導(dǎo)航:

一步一步學(xué)Linq to sql(一):預(yù)備知識(shí)

一步一步學(xué)Linq to sql(二):DataContext與實(shí)體

一步一步學(xué)Linq to sql(三):增刪改

一步一步學(xué)Linq to sql(四):查詢句法

一步一步學(xué)Linq to sql(五):存儲(chǔ)過(guò)程

一步一步學(xué)Linq to sql(六):探究特性

一步一步學(xué)Linq to sql(七):并發(fā)與事務(wù)

一步一步學(xué)Linq to sql(八):繼承與關(guān)系

一步一步學(xué)Linq to sql(九):其它補(bǔ)充

一步一步學(xué)Linq to sql(十):分層構(gòu)架的例子


簡(jiǎn)易留言簿

       現(xiàn)在,我們就可以使用Linq to sql完成簡(jiǎn)易留言簿了。實(shí)現(xiàn)以下功能:

l         發(fā)表留言(增)

l         查看留言(查)

l         管理員回復(fù)留言(改)

l         管理員刪除留言(刪除)

首先,創(chuàng)建一個(gè)Default.ASPx,在頁(yè)面上加入一些控件:

<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" ? "暫無(wú)" : Eval("Reply")%>

            </td>

            </tr>          

        </table>

        <br/>

        </ItemTemplate>

        </ASP:Repeater>

    </div>

       你可能很難想象,使用Linq to sql進(jìn)行數(shù)據(jù)訪問(wèn)會(huì)是這么簡(jiǎn)單,后臺(tái)代碼:

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

    }

}

      

系列文章導(dǎo)航:

一步一步學(xué)Linq to sql(一):預(yù)備知識(shí)

一步一步學(xué)Linq to sql(二):DataContext與實(shí)體

一步一步學(xué)Linq to sql(三):增刪改

一步一步學(xué)Linq to sql(四):查詢句法

一步一步學(xué)Linq to sql(五):存儲(chǔ)過(guò)程

一步一步學(xué)Linq to sql(六):探究特性

一步一步學(xué)Linq to sql(七):并發(fā)與事務(wù)

一步一步學(xué)Linq to sql(八):繼承與關(guān)系

一步一步學(xué)Linq to sql(九):其它補(bǔ)充

一步一步學(xué)Linq to sql(十):分層構(gòu)架的例子


前面創(chuàng)建Linq to sql Classes的時(shí)候我們輸入名字GuestBook,系統(tǒng)就為我們自動(dòng)創(chuàng)建了GuestBookDataContext(你也可以在GuestBook.Designer.cs中找到類定義)。在綁定的時(shí)候我們使用查詢句法查詢留言表中所有留言,按照發(fā)表時(shí)間倒序(天哪?這是數(shù)據(jù)訪問(wèn)嗎?好像僅僅定義了一句SQL啊)。在發(fā)表留言按鈕中,我們?yōu)橐粋€(gè)tbGuestBook賦值,然后把它加入留言表,再提交更改,就這樣完成了記錄的插入。

 

       運(yùn)行效果如下圖:

 

       然后,再創(chuàng)建一個(gè)Admin.ASPx,前臺(tái)代碼如下:

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

       后臺(tái)代碼:

 

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

        }

    }

}

   

系列文章導(dǎo)航:

一步一步學(xué)Linq to sql(一):預(yù)備知識(shí)

一步一步學(xué)Linq to sql(二):DataContext與實(shí)體

一步一步學(xué)Linq to sql(三):增刪改

一步一步學(xué)Linq to sql(四):查詢句法

一步一步學(xué)Linq to sql(五):存儲(chǔ)過(guò)程

一步一步學(xué)Linq to sql(六):探究特性

一步一步學(xué)Linq to sql(七):并發(fā)與事務(wù)

一步一步學(xué)Linq to sql(八):繼承與關(guān)系

一步一步學(xué)Linq to sql(九):其它補(bǔ)充

一步一步學(xué)Linq to sql(十):分層構(gòu)架的例子


運(yùn)行效果如下圖:

 

 

在這里,我們通過(guò)Single方法獲取一條記錄,也就是一個(gè)tbGuestBook實(shí)例,更新了一些屬性后保存也就完成了改這個(gè)操作。刪除操作更簡(jiǎn)單,只需要從表中移除對(duì)象。你是不是覺(jué)得好像不是在操作數(shù)據(jù)庫(kù),像在操作內(nèi)存中的對(duì)象。

       由于寫(xiě)了日志,看看改和刪操作會(huì)是怎么樣的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)介紹查詢句法。

it知識(shí)庫(kù)一步一步學(xué)Linq to sql(三):增刪改,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 午夜网站视频 | 亚洲午夜精品视频 | 久久久久久久电影 | 国产精品美女久久久久久不卡 | 久久草视频 | 全免费a级毛片免费看视频免 | 国产a级黄色录像 | 日韩欧美视频网站 | 久久一区二区免费视频 | 色综合一区二区 | 天天插天天射天天干 | 夜夜骑首页 | 国产中文字幕在线观看 | 国产精品高潮呻吟久久 | 日韩视频在线一区 | 在线观看欧美一区 | 蜜臀久久 | 国产高潮好爽受不了了夜色 | 国产一级片免费在线观看 | 中文字幕在线免费观看 | 51ⅴ精品国产91久久久久久 | 国产欧美精品一区二区三区 | 免费国产一区二区 | 成人免费观看视频 | 日本三级电影在线免费观看 | 亚洲人va欧美va人人爽 | 麻豆一区二区三区 | 99精品欧美一区二区三区综合在线 | 久久九九网站 | 超碰免费观看 | 久久欧美高清二区三区 | 国产一区免费视频 | av手机在线看| 日韩一区二区三区在线看 | 国产一级影片 | 视频在线日韩 | 人人九九 | 久久国内 | 盗摄精品av一区二区三区 | 人人操日日干 | 黑人巨大精品欧美黑白配亚洲 |