`
long546324
  • 浏览: 203259 次
  • 性别: Icon_minigender_1
  • 来自: 云南
社区版块
存档分类
最新评论

一步一步学Linq to sql(三):增删改

    博客分类:
  • LINQ
阅读更多
示例数据库

在数据库中创建一个名为GuestBook的数据库,在里面创建一个tbGuestBook的表,结构如上表。
生成实体类
右键点击网站项目,选择添加新项,然后选择“Linq to sql Classes”,命名为GuestBook。然后打开App_Code里面的GuestBook.dbml。设计视图上的文字提示你可以从服务器资源管理器或者攻击箱拖动项到设计界面上来创建实体类。

那么,我们就在服务器资源管理器中创建一个指向GuestBook数据库的数据连接,然后把tbGuestBook表拖动到GuestBook.dbml的设计视图上,按CTRL+S保存。打开GuestBook.designer.cs可以发现系统自动创建了GuestBook数据库中tbGuestBook表的映射,如下图:

简易留言簿
现在,我们就可以使用Linq to sql完成简易留言簿了。实现以下功能:
发表留言(增)
查看留言(查)
管理员回复留言(改)
管理员删除留言(删除)
首先,创建一个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="发表留言" 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" />
管理员回复:<%# Eval("IsReplied").ToString() == "False" ? "暂无" : Eval("Reply")%>
</td>
</tr>
</table>
<br/>
</ItemTemplate>
</asp:Repeater>
</div>

你可能很难想象,使用Linq to sql进行数据访问会是这么简单,后台代码:
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();
    }
}

前面创建Linq to sql Classes的时候我们输入名字GuestBook,系统就为我们自动创建了GuestBookDataContext(你也可以在GuestBook.Designer.cs中找到类定义)。在绑定的时候我们使用查询句法查询留言表中所有留言,按照发表时间倒序(天哪?这是数据访问吗?好像仅仅定义了一句SQL啊)。在发表留言按钮中,我们为一个tbGuestBook赋值,然后把它加入留言表,再提交更改,就这样完成了记录的插入。
运行效果如下图:
然后,再创建一个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")%>'/>
管理员回复:<asp:TextBox runat="server" ID="tb_Reply" TextMode="MultiLine" Width="300px" Text='<%# Eval("Reply")%>'/>
<asp:Button ID="btn_SendReply" runat="server" Text="发表回复" 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();
          }
      }
}

运行效果如下图:

在这里,我们通过Single方法获取一条记录,也就是一个tbGuestBook实例,更新了一些属性后保存也就完成了改这个操作。删除操作更简单,只需要从表中移除对象。你是不是觉得好像不是在操作数据库,像在操作内存中的对象。

由于写了日志,看看改和删操作会是怎么样的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

转载:http://www.tg029.com/viewthread.php?tid=1647&extra=page%3D1
分享到:
评论

相关推荐

    LINQ中文教程

    一步一步学Linq to sql(三):增删改 15 一步一步学Linq to sql(四):查询句法 21 一步一步学Linq to sql(五):存储过程 35 一步一步学Linq to sql(六):探究特性 46 一步一步学Linq to sql(七):并发与...

    ASP.NET MVC Linq to SQL 实现数据库增删改(源代码)ASP.NET MVC Linq to SQL 实现数据库增删改(源代码) ASP.NET MVC 分页控件

    ASP.NET MVC Linq to SQL 实现数据库增删改(源代码)ASP.NET MVC Linq to SQL 实现数据库增删改(源代码) ASP.NET MVC 分页控件

    LINQ详细教程

    一步一步学Linq to sql(三):增删改 14 一步一步学Linq to sql(四):查询句法 20 一步一步学Linq to sql(五):存储过程 34 一步一步学Linq to sql(六):探究特性 45 一步一步学Linq to sql(七):并发与...

    VS2008 LINQ基础教程

    一步一步学Linq to sql(三):增删改 15 一步一步学Linq to sql(四):查询句法 21 一步一步学Linq to sql(五):存储过程 35 一步一步学Linq to sql(六):探究特性 46 一步一步学Linq to sql(七):并发与...

    LINQ中文教程LINQ中文教程

    一步一步学Linq to sql(三):增删改 15 一步一步学Linq to sql(四):查询句法 21 一步一步学Linq to sql(五):存储过程 35 一步一步学Linq to sql(六):探究特性 46 一步一步学Linq to sql(七):并发与...

    LINQ中文教程word格式

    一步一步学Linq to sql(三):增删改 8 一步一步学Linq to sql(四):查询句法 11 一步一步学Linq to sql(五):存储过程 17 一步一步学Linq to sql(六):探究特性 21 一步一步学Linq to sql(七):并发与事务...

    LINQ基础教程(中文版) 适合初学者

    一步一步学Linq to sql(三):增删改 15 一步一步学Linq to sql(四):查询句法 21 一步一步学Linq to sql(五):存储过程 35 一步一步学Linq to sql(六):探究特性 46 一步一步学Linq to sql(七):并发与...

    LINQ中文系列教程

    一步一步学Linq to sql(三):增删改 15 一步一步学Linq to sql(四):查询句法 21 一步一步学Linq to sql(五):存储过程 35 一步一步学Linq to sql(六):探究特性 46 一步一步学Linq to sql(七):并发与...

    LINQ中文教程(WORD格式)

    一步一步学Linq to sql(三):增删改 15 一步一步学Linq to sql(四):查询句法 21 一步一步学Linq to sql(五):存储过程 35 一步一步学Linq to sql(六):探究特性 46 一步一步学Linq to sql(七):并发与...

    linq to sql实现分层与gridview使用实现增删改

    linq to sql实现分层与gridview使用实现增删改,适合新手做三层项目开发,快速入门

    LINQ TO SQL 增删改 demo

    留言薄,使用LINQ TO SQL 开发,供大家了解LINQ TO SQL

    linq to sql增删查

    linq to sql 的增删改,利用的三层架构模式编写的一个简单的案例,非常适合初学者来学习运用linq to sql 的编写 以及对三层架构的认识

    LINQ中文教程.pdf

    一步一步学 Linq to sql(三):增删改............................................................................... 15 一步一步学 Linq to sql(四):查询句法 ............................................

    ORM使用手册 使用说明. ORM系统采用与微软LINQ to SQL相似的操作方式,支持类似LINQ语法查询与基于轨迹的增删改操作。

    ORM模型的简单性简化了数据库查询过程。使用ORM查询工具,用户可以访问期望数据,而不必理解数据库的底层结构。

    ASP.NET MVC+LINQ TO SQL+MvcPager分页

    很好的MVC实例,包括数据库的读取,修改,删除,希望能帮助人

    C#如何实现对sql server数据库的增删改查

    一个专门实现sql server数据库的增删改查,以及将查询的结果返回成表格等功能,分享代码如下 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data....

    2_net_kindmaa_

    LinQ入门教程pdf格式,Language Integrated Query学习指南,DoNet Framework 3.5 系列教程内容之一,内容由初级到高级,介绍什么是Linq to sql,DataContext与实体,一步一步学Linq to sql(三):数据增删改,查询...

    C#连接数据库 —— (二)Linq To EF 的 lambda表达式使用 ,增删查改、判断、分组、排序

    C#连接数据库 —— (一)实体框架(EF)的创建 (Linq To EF) Linq 使用 首先,我们创建数据库实体对象(下面的所有操作都用到这个对象): var DataModelsDb = new DbTrainEntities(); 查询所有数据(对应SQL...

    三层模式之增删改源码

    net2008+sqlserver2005,利用Linq分三层操作数据,数据库文件在DB_51aspx下,直接附加即可,新手可以看一看

    WPF校园成绩管理(实现增删改查)

    VS2010+sql2008(linq to entitiy) WPF实现增删改,实现子窗口关闭主窗口刷新效果。

Global site tag (gtag.js) - Google Analytics