一步一步学Linq to sql3增删改.docx
- 文档编号:10193402
- 上传时间:2023-02-09
- 格式:DOCX
- 页数:9
- 大小:106.77KB
一步一步学Linq to sql3增删改.docx
《一步一步学Linq to sql3增删改.docx》由会员分享,可在线阅读,更多相关《一步一步学Linq to sql3增删改.docx(9页珍藏版)》请在冰豆网上搜索。
一步一步学Linqtosql3增删改
示例数据库
字段名
字段类型
允许空
字段说明
ID
uniqueidentifier
表主键字段
UserName
varchar(50)
留言用户名
PostTime
datetime
留言时间
Message
varchar(400)
√
留言内容
IsReplied
bit
留言是否回复
Reply
varchar(400)
√
留言管理员回复
在数据库中创建一个名为GuestBook的数据库,在里面创建一个tbGuestBook的表,结构如上表。
生成实体类
右键点击网站项目,选择添加新项,然后选择“LinqtosqlClasses”,命名为GuestBook。
然后打开App_Code里面的GuestBook.dbml。
设计视图上的文字提示你可以从服务器资源管理器或者攻击箱拖动项到设计界面上来创建实体类。
那么,我们就在服务器资源管理器中创建一个指向GuestBook数据库的数据连接,然后把tbGuestBook表拖动到GuestBook.dbml的设计视图上,按CTRL+S保存。
打开GuestBook.designer.cs可以发现系统自动创建了GuestBook数据库中tbGuestBook表的映射,如下图:
简易留言簿
现在,我们就可以使用Linqtosql完成简易留言簿了。
实现以下功能:
● 发表留言(增)
● 查看留言(查)
● 管理员回复留言(改)
● 管理员删除留言(删除)
首先,创建一个Default.aspx,在页面上加入一些控件:
姓名
TextBoxID="tb_UserName"runat="server">
TextBox>
留言
TextBoxID="tb_Message"runat="server"Height="100px"TextMode="MultiLine"Width="300px">
TextBox>
ButtonID="btn_SendMessage"runat="server"Text="发表留言"OnClick="btn_SendMessage_Click"/> RepeaterID="rpt_Message"runat="server"> solid1px#666666;font-size: 10pt;background-color: #f0f0f0"> <%#Eval("Message")%> <%#Eval("PostTime")%>-<%#Eval("UserName")%> 管理员回复: <%#Eval("IsReplied").ToString()=="False"? "暂无": Eval("Reply")%>
Repeater>
你可能很难想象,使用Linqtosql进行数据访问会是这么简单,后台代码:
publicpartialclass_Default:
System.Web.UI.Page
{
GuestBookDataContextctx=newGuestBookDataContext("server=xxx;database=GuestBook;uid=xxx;pwd=xxx");
protectedvoidPage_Load(objectsender,EventArgse)
{
if(!
IsPostBack)
{
SetBind();
}
}
protectedvoidbtn_SendMessage_Click(objectsender,EventArgse)
{
tbGuestBookgb=newtbGuestBook();
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();
}
privatevoidSetBind()
{
rpt_Message.DataSource=fromgbinctx.tbGuestBooksorderbygb.PostTimedescendingselectgb;
rpt_Message.DataBind();
}
}
前面创建LinqtosqlClasses的时候我们输入名字GuestBook,系统就为我们自动创建了GuestBookDataContext(你也可以在GuestBook.Designer.cs中找到类定义)。
在绑定的时候我们使用查询句法查询留言表中所有留言,按照发表时间倒序(天哪?
这是数据访问吗?
好像仅仅定义了一句SQL啊)。
在发表留言按钮中,我们为一个tbGuestBook赋值,然后把它加入留言表,再提交更改,就这样完成了记录的插入。
运行效果如下图:
然后,再创建一个Admin.aspx,前台代码如下:
RepeaterID="rpt_Message"runat="server"OnItemCommand="rpt_Message_ItemCommand"> solid1px#666666;font-size: 10pt;background-color: #f0f0f0"> <%#Eval("Message")%> <%#Eval("PostTime")%>-<%#Eval("UserName")%> ButtonID="btn_DeleteMessage"runat="server"Text="删除留言"CommandName="DeleteMessage"CommandArgument='<%#Eval("ID")%>'/> 管理员回复: TextBoxrunat="server"ID="tb_Reply"TextMode="MultiLine"Width="300px"Text='<%#Eval("Reply")%>'/> ButtonID="btn_SendReply"runat="server"Text="发表回复"CommandName="SendReply"CommandArgument='<%#Eval("ID")%>'/>
Repeater>
后台代码:
publicpartialclassAdmin:
System.Web.UI.Page
{
GuestBookDataContextctx=newGuestBookDataContext("server=xxx;database=GuestBook;uid=xxx;pwd=xxx");
protectedvoidPage_Load(objectsender,EventArgse)
{
if(!
IsPostBack)
{
SetBind();
}
}
privatevoidSetBind()
{
rpt_Message.DataSource=fromgbinctx.tbGuestBooksorderbygb.PostTimedescendingselectgb;
rpt_Message.DataBind();
}
protectedvoidrpt_Message_ItemCommand(objectsource,RepeaterCommandEventArgse)
{
if(e.CommandName=="DeleteMessage")
{
StreamWritersw=newStreamWriter(Server.MapPath("log.txt"),true);
ctx.Log=sw;
tbGuestBookgb=ctx.tbGuestBooks.Single(b=>b.ID==newGuid(e.CommandArgument.ToString()));
ctx.tbGuestBooks.Remove(gb);
ctx.SubmitChanges();
SetBind();
sw.Close();
}
if(e.CommandName=="SendReply")
{
StreamWritersw=newStreamWriter(Server.MapPath("log.txt"),true);
ctx.Log=sw;
tbGuestBookgb=ctx.tbGuestBooks.Single(b=>b.ID==newGuid(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]ISNULL)
--@p0:
InputGuid(Size=0;Prec=0;Scale=0)[00000000-0000-0000-0000-000000000000]
--@p1:
InputString(Size=4;Prec=0;Scale=0)[ghgh]
--@p2:
InputDateTime(Size=0;Prec=0;Scale=0)[2007-8-1610:
20:
09]
--@p3:
InputString(Size=3;Prec=0;Scale=0)[ghj]
--@p4:
InputBoolean(Size=0;Prec=0;Scale=0)[True]
--@p5:
InputString(Size=3;Prec=0;Scale=0)[qqq]
--Context:
SqlProvider(Sql2005)Model:
AttributedMetaModelBuild:
3.5.20706.1
DELETEFROM[dbo].[tbGuestBook]WHERE([ID]=@p0)AND([UserName]=@p1)AND([PostTime]=@p2)AND([Message]=@p3)AND(NOT([IsReplied]=1))AND([Reply]=@p4)
--@p0:
InputGuid(Size=0;Prec=0;Scale=0)[158ec941-13ff-4093-bd8b-9fceae152171]
--@p1:
InputString(Size=2;Prec=0;Scale=0)[44]
--@p2:
InputDateTime(Size=0;Prec=0;Scale=0)[2007-8-169:
56:
19]
--@p3:
InputString(Size=2;Prec=0;Scale=0)[44]
--@p4:
InputString(Size=3;Prec=0;Scale=0)[222]
--Context:
SqlProvider(Sql2005)Model:
AttributedMetaModelBuild:
3.5.20706.1
今天就讲到这里,下次将系统介绍查询句法。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 一步一步学Linq to sql3增删改 一步一步 Linq sql3 增删