3. 数据库操作 只不过是 增删改查
示例数据库
字段名 |
字段类型 |
允许空 |
字段说明 |
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: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(); } } |