示例数据库
在数据库中创建一个名为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 to sql(三):增删改 15 一步一步学Linq to sql(四):查询句法 21 一步一步学Linq to sql(五):存储过程 35 一步一步学Linq to sql(六):探究特性 46 一步一步学Linq to sql(七):并发与...
一步一步学Linq to sql(三):增删改 15 一步一步学Linq to sql(四):查询句法 21 一步一步学Linq to sql(五):存储过程 35 一步一步学Linq to sql(六):探究特性 46 一步一步学Linq to sql(七):并发与...
一步一步学Linq to sql(三):增删改 15 一步一步学Linq to sql(四):查询句法 21 一步一步学Linq to sql(五):存储过程 35 一步一步学Linq to sql(六):探究特性 46 一步一步学Linq to sql(七):并发与...
在这个"LINQ TO SQL 增删改 demo"中,我们主要关注的是如何使用LINQ to SQL进行数据库的插入(Insert)、删除(Delete)和更新(Update)操作,这些是任何数据库应用的基础。下面将详细解释这些概念。 首先,LINQ ...
在本教程中,我们将重点讨论如何利用LINQ to SQL实现分层架构,并结合GridView控件进行数据的增删改操作,这对于新手在进行三层项目开发时是非常实用的。 首先,让我们了解什么是LINQ to SQL。它是.NET Framework ...
在这个项目中,我们将深入探讨如何在ASP.NET MVC中利用Linq to SQL来实现数据库的增、删、改操作,并结合分页控件提升用户体验。 首先,我们需要创建一个数据上下文类,这个类继承自System.Data.Linq.DataContext,...
- 增删改:使用LINQ to SQL进行数据的插入、更新和删除操作。 - 查询句法:学习如何使用LINQ的查询表达式和方法语法进行复杂查询。 - 存储过程:调用数据库中的存储过程,并处理返回的结果。 - 探究特性:理解...
《LINQ to SQL 学习笔记》 LINQ (Language Integrated Query) 是.NET框架中引入的一项强大技术,它允许开发者使用熟悉的C#或VB.NET语言语法进行数据查询,而无需学习新的查询语言。LINQ to SQL是LINQ的一个特定实现...
**LINQ to SQL 详细教程** LINQ (Language Integrated Query) 是 .NET Framework 中的一项技术,它允许开发者使用类似 SQL 的语法在各种数据源上进行查询,包括对象集合、XML、SQL 数据库等。其中,LINQ to SQL 是...
#### 三、LINQ to SQL的核心概念 - **DataContext**:用于与数据库建立连接以及执行查询的核心类。 - **Table**:表示数据库中的表,通过DataContext访问。 - **ObjectSet**:表示查询结果集。 - **Query ...
Linq to SQL 支持直接在 C# 代码中使用 LINQ 查询来执行数据库的增删改操作。例如,添加一条新记录: ```csharp MyDataContext db = new MyDataContext(); MyTable entity = new MyTable { Column1 = "value1", ...
除了查询,我们还可以使用LINQ to SQL进行数据的增删改操作。例如: ```csharp var newCustomer = new Customer { Name = "John Doe" }; db.Customers.InsertOnSubmit(newCustomer); db.SubmitChanges(); ``` 对于...
#### 三、LINQ to SQL的实际应用 1. **定义对象模型**:无论是通过代码编辑器、对象关系设计器还是SqlMetal.exe工具,都可以根据实际需求选择合适的方法来定义对象模型。 2. **查询操作**:利用LINQ to SQL的强大...
3. **Entity Framework与LINQ to SQL**:对比和理解Entity Framework与LINQ to SQL的区别,虽然后者在某些情况下更简单,但前者通常提供了更广泛的功能和更好的社区支持。 4. **MvcPager使用**:掌握MvcPager的安装...
标题中的“Linq三层模式之增删改源码”指的是基于C#的.NET开发中,使用LINQ(Language Integrated Query,语言集成查询)技术在三层架构(数据访问层、业务逻辑层、表示层)中实现数据的添加、删除和修改功能的源...
### LINQ to SQL中文教程概览 #### 一、LINQ to SQL介绍 **LINQ to SQL**是Microsoft .NET Framework中的一个组件,它提供了一种将数据从数据库映射到内存中的对象的方式,允许开发人员使用面向对象的编程语言(如...
这里的“商业源码-编程源码-Linq三层模式之增删改源码.zip”提供了一个使用LINQ实现的三层架构示例,用于演示在数据库操作中的基本增删改功能。三层架构是一种常见的软件设计模式,它将应用程序分为表示层、业务逻辑...
一步一步学LINQ to SQL** LINQ to SQL是.NET Framework提供的一种ORM(对象关系映射)工具,用于简化SQL Server数据库的访问。本部分详细介绍了以下内容: - **预备知识**:理解LINQ to SQL的基本概念,如...