Linq to sql(l留言簿实例):增删改
来源:互联网 发布:镜子应用是什么软件 编辑:程序博客网 时间:2024/06/15 14:44
示例数据库
字段名
字段类型
允许空
字段说明
ID
uniqueidentifier
表主键字段
UserName
varchar(50)
留言用户名
PostTime
datetime
留言时间
Message
varchar(400)
√
留言内容
IsReplied
bit
留言是否回复
Reply
varchar(400)
√
留言管理员回复
在数据库中创建一个名为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完成简易留言簿了。实现以下功能:
l 发表留言(增)
l 查看留言(查)
l 管理员回复留言(改)
l 管理员删除留言(删除)
首先,创建一个Default.aspx,在页面上加入一些控件:
<div>
姓名
<asp:TextBoxID="tb_UserName" runat="server"></asp:TextBox><br/>
<br/>
留言
<asp:TextBoxID="tb_Message" runat="server" Height="100px"TextMode="MultiLine"Width="300px"></asp:TextBox><br/>
<br/>
<asp:ButtonID="btn_SendMessage"runat="server" Text="发表留言"OnClick="btn_SendMessage_Click"/><br />
<br/>
<asp:RepeaterID="rpt_Message" runat="server">
<ItemTemplate>
<tablewidth="600px" style="border:solid1px #666666; font-size:10pt; background-color:#f0f0f0">
<tr>
<tdalign="left" width="400px">
<%# Eval("Message")%>
</td>
<tdalign="right" width="200px">
<%# Eval("PostTime")%> -<%# Eval("UserName")%>
</td>
</tr>
<tr>
<tdcolspan="2" align="right">
<hrwidth="300px" />
管理员回复:<%# Eval("IsReplied").ToString() =="False" ? "暂无" : Eval("Reply")%>
</td>
</tr>
</table>
<br/>
</ItemTemplate>
</asp:Repeater>
</div>
你可能很难想象,使用Linq to sql进行数据访问会是这么简单,后台代码:
public partialclass _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 gbin ctx.tbGuestBooks orderby gb.PostTimedescending select gb;
rpt_Message.DataBind();
}
}
前面创建Linq to sql Classes的时候我们输入名字GuestBook,系统就为我们自动创建了GuestBookDataContext(你也可以在GuestBook.Designer.cs中找到类定义)。在绑定的时候我们使用查询句法查询留言表中所有留言,按照发表时间倒序(天哪?这是数据访问吗?好像仅仅定义了一句SQL啊)。在发表留言按钮中,我们为一个tbGuestBook赋值,然后把它加入留言表,再提交更改,就这样完成了记录的插入。
运行效果如下图:
然后,再创建一个Admin.aspx,前台代码如下:
<div>
<asp:RepeaterID="rpt_Message" runat="server" OnItemCommand="rpt_Message_ItemCommand">
<ItemTemplate>
<tablewidth="600px" style="border:solid1px #666666; font-size:10pt; background-color:#f0f0f0">
<tr>
<tdalign="left" width="400px">
<%# Eval("Message")%>
</td>
<tdalign="right" width="200px">
<%# Eval("PostTime")%> -<%# Eval("UserName")%>
</td>
</tr>
<tr>
<tdcolspan="2" align="right">
<hrwidth="300px" />
<asp:ButtonID="btn_DeleteMessage"runat="server" Text="删除留言"CommandName="DeleteMessage"CommandArgument='<%# Eval("ID")%>'/>
管理员回复:<asp:TextBoxrunat="server" ID="tb_Reply" TextMode="MultiLine"Width="300px" Text='<%# Eval("Reply")%>'/>
<asp:ButtonID="btn_SendReply"runat="server" Text="发表回复"CommandName="SendReply"CommandArgument='<%# Eval("ID")%>'/>
</td>
</tr>
</table>
<br/>
</ItemTemplate>
</asp:Repeater>
</div>
后台代码:
public partialclass 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 gbin ctx.tbGuestBooks orderby gb.PostTimedescending 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实例,更新了一些属性后保存也就完成了改这个操作。删除操作更简单,只需要从表中移除对象。你是不是觉得好像不是在操作数据库,像在操作内存中的对象。
- Linq to sql(l留言簿实例):增删改
- linq to sql 学习(4)增删改查实例
- Linq to sql(三):增删改
- Linq to Sql (三):增删改
- Linq to sql(三):增删改
- Linq to sql(三):增删改
- Linq to sql 增删改
- 一步一步学Linq to sql(三):增删改
- 一步一步学Linq to sql(三):增删改
- 一步一步学Linq to sql(三):增删改
- 一步一步学Linq to sql(三):增删改
- 一步一步学Linq to sql(三):增删改
- 一步一步学Linq to sql(三):增删改
- 【转】一步一步学Linq to sql(三):增删改
- 一步一步学Linq to sql(三):增删改
- 一步一步学Linq to sql(三):增删改
- ORM, Linq to sql增删改查
- Linq to sql增删改查
- java框架一些常见面试题
- Android中用GridView实现九宫格的两种方法
- 布Windows Azure开发者预览版活动目录
- JAVA卡与智能卡
- Android改变标题栏背景颜色
- Linq to sql(l留言簿实例):增删改
- 没有找到MSVCR80D.dll的解决方案(转)
- response.sendRedirect 的功能是地址重定向(页面跳转)
- assert()
- java线程系列---Semaphore信号灯
- 类与类之间的关系图(Class Diagram,UML图)
- AxureRP使用建议参考
- UML基础: 统一建模语言简介
- Linq tp sql 基础