/**//****************************************************************** * * GuestBook.DB Description * * GuestBook.DB类集成了该留言板所有的数据操作、业务逻辑 * 以及其他的辅助方法。 * ******************************************************************/using System;using System.Data;using System.Configuration;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls;namespace GuestBook...{ public class DB ...{ GuestBook.DB 类变量#region GuestBook.DB 类变量 private System.Data.SqlClient.SqlConnection dbcon; private System.Data.SqlClient.SqlCommand cmd; private System.Data.SqlClient.SqlDataAdapter dscmd; public static int KeepState = int.Parse(System.Configuration.ConfigurationManager.AppSettings["keep"].ToString()); #endregion GuestBook.DB 类构造函数#region GuestBook.DB 类构造函数 /**//// <summary> /// DB类构造函数,在实例化的时候,连接数据库,并打开数据连接。 数据层的方法。 /// </summary> public DB() ...{ string con = System.Configuration.ConfigurationManager.AppSettings["constr"].ToString(); dbcon = new System.Data.SqlClient.SqlConnection(con); dbcon.Open(); } #endregion GuestBook 数据层, 方法受保护,用private修饰。#region GuestBook 数据层, 方法受保护,用private修饰。 /**//// <summary> /// 关闭数据库连接,并释放资源。 数据层的方法。 /// </summary> private void ConClose() ...{ if (dbcon != null) ...{ if (dbcon.State.ToString() == "Open") ...{ dbcon.Close(); dbcon.Dispose(); } } } /**//// <summary> /// 向数据库中插入一条记录。 数据层的方法。 /// </summary> /// <param name="uid">用户名</param> /// <param name="email">邮件</param> /// <param name="sex">性别</param> /// <param name="ip">IP地址</param> /// <param name="title">标题</param> /// <param name="msgcontent">内容</param> /// <param name="face">头像</param> /// <returns>成功返回True,失败返回False</returns> private bool DB_InsertMsg(string uid, string email, string sex, string ip, string title, string msgcontent, string face) ...{ cmd = new System.Data.SqlClient.SqlCommand("sp_gb_update", dbcon); cmd.CommandType = System.Data.CommandType.StoredProcedure; cmd.Parameters.Clear(); cmd.Parameters.Add(new System.Data.SqlClient.SqlParameter("@CMD", "INSERT")); cmd.Parameters.Add(new System.Data.SqlClient.SqlParameter("@uid", uid)); cmd.Parameters.Add(new System.Data.SqlClient.SqlParameter("@uemail", email)); cmd.Parameters.Add(new System.Data.SqlClient.SqlParameter("@sex", sex)); cmd.Parameters.Add(new System.Data.SqlClient.SqlParameter("@ip", ip)); cmd.Parameters.Add(new System.Data.SqlClient.SqlParameter("@title", strReplace(title))); cmd.Parameters.Add(new System.Data.SqlClient.SqlParameter("@msgcontent", strReplace(msgcontent))); cmd.Parameters.Add(new System.Data.SqlClient.SqlParameter("@face", face)); bool tf = false; if (cmd.ExecuteNonQuery() > 0) tf = true; else tf = false; ConClose(); return tf; } /**//// <summary> /// 更改审核状态。 数据层的方法。 /// </summary> /// <param name="id">记录ID</param> /// <param name="state">更改状态值</param> /// <returns>成功返回True,失败返回False</returns> private bool DB_ChangeState(int id, string state) ...{ cmd = new System.Data.SqlClient.SqlCommand("sp_gb_update", dbcon); cmd.CommandType = System.Data.CommandType.StoredProcedure; cmd.Parameters.Clear(); cmd.Parameters.Add(new System.Data.SqlClient.SqlParameter("@CMD", "UPDATE")); cmd.Parameters.Add(new System.Data.SqlClient.SqlParameter("@id", id)); cmd.Parameters.Add(new System.Data.SqlClient.SqlParameter("@state", state)); bool tf = false; if (cmd.ExecuteNonQuery() > 0) tf = true; else tf = false; ConClose(); return tf; } /**//// <summary> /// 回复留言。 数据层的方法。 /// </summary> /// <param name="id">记录ID</param> /// <param name="reply">回复内容</param> /// <returns>成功返回True,失败返回False</returns> private bool DB_Reply(int id, string reply) ...{ cmd = new System.Data.SqlClient.SqlCommand("sp_gb_update", dbcon); cmd.CommandType = System.Data.CommandType.StoredProcedure; cmd.Parameters.Clear(); cmd.Parameters.Add(new System.Data.SqlClient.SqlParameter("@id", id)); cmd.Parameters.Add(new System.Data.SqlClient.SqlParameter("@reply", reply)); cmd.Parameters.Add(new System.Data.SqlClient.SqlParameter("@CMD", "REPLY")); bool tf = false; if (cmd.ExecuteNonQuery() > 0) tf = true; else tf = false; ConClose(); return tf; } /**//// <summary> /// 删除留言。 数据层的方法。 /// </summary> /// <param name="id">记录ID</param> /// <returns>成功返回True,失败返回False</returns> private bool DB_Delete(int id) ...{ cmd = new System.Data.SqlClient.SqlCommand("sp_gb_update", dbcon); cmd.CommandType = System.Data.CommandType.StoredProcedure; cmd.Parameters.Clear(); cmd.Parameters.Add(new System.Data.SqlClient.SqlParameter("@CMD", "DELETE")); cmd.Parameters.Add(new System.Data.SqlClient.SqlParameter("@id", id)); bool tf = false; if (cmd.ExecuteNonQuery() > 0) tf = true; else tf = false; ConClose(); return tf; } /**//// <summary> /// 获取留言记录列表 。数据层的方法。 /// </summary> /// <param name="page">调用的Page实例</param> /// <param name="startpage">开始页</param> /// <param name="pagesize">每页记录条数</param> /// <param name="pagecount">Out 记录总数</param> /// <returns>返回记录表</returns> private DataTable DB_GetListForPages(int startpage, int pagesize, out int pagecount) ...{ pagecount = 0; dscmd = new System.Data.SqlClient.SqlDataAdapter("sp_gb_select_for_pages", dbcon); dscmd.SelectCommand.CommandType = System.Data.CommandType.StoredProcedure; dscmd.SelectCommand.Parameters.Add(new System.Data.SqlClient.SqlParameter("@startpage", startpage)); dscmd.SelectCommand.Parameters.Add(new System.Data.SqlClient.SqlParameter("@pagesize", pagesize)); dscmd.SelectCommand.Parameters.Add(new System.Data.SqlClient.SqlParameter("@pagecount", pagecount)); dscmd.SelectCommand.Parameters[2].Direction = System.Data.ParameterDirection.Output; DataTable dt = new DataTable(); try ...{ dscmd.Fill(dt); pagecount = int.Parse(dscmd.SelectCommand.Parameters[2].Value.ToString()); } catch ...{ pagecount = 0; } ConClose(); return dt; } #endregion GuestBook 业务层, 方法公开,用public修饰#region GuestBook 业务层, 方法公开,用public修饰 /**//// <summary> /// 向数据库中插入一条记录。 数据层的方法。 /// </summary> /// <param name="uid">用户名</param> /// <param name="email">邮件</param> /// <param name="sex">性别</param> /// <param name="ip">IP地址</param> /// <param name="title">标题</param> /// <param name="msgcontent">内容</param> /// <param name="face">头像</param> /// <returns>成功返回True,失败返回False</returns> public bool InsertMsg(string uid, string email, string sex, string ip, string title, string msgcontent, string face) ...{ return DB_InsertMsg(uid, email, sex, ip, title, msgcontent, face); } /**//// <summary> /// 更改审核状态。 数据层的方法。 /// </summary> /// <param name="id">记录ID</param> /// <param name="state">更改状态值</param> /// <returns>成功返回True,失败返回False</returns> public bool ChangeState(int id, string state) ...{ return DB_ChangeState(id, state); } /**//// <summary> /// 回复留言。 数据层的方法。 /// </summary> /// <param name="id">记录ID</param> /// <param name="reply">回复内容</param> /// <returns>成功返回True,失败返回False</returns> public bool Reply(int id, string reply) ...{ return DB_Reply(id, reply); } /**//// <summary> /// 删除留言。 数据层的方法。 /// </summary> /// <param name="id">记录ID</param> /// <returns>成功返回True,失败返回False</returns> public bool Delete(int id) ...{ return DB_Delete(id); } /**//// <summary> /// 获取留言记录列表 。数据层的方法。 /// </summary> /// <param name="page">调用的Page实例</param> /// <param name="startpage">开始页</param> /// <param name="pagesize">每页记录条数</param> /// <param name="pagecount">Out 记录总数</param> /// <returns>返回记录表</returns> public DataTable GetListForPages( Page page,int startpage, int pagesize, out int pagecount) ...{ pagecount = 0; DataTable dt; dt = DB_GetListForPages(startpage, pagesize, out pagecount); dt = getStateStr(dt,page); return dt; } /**//// <summary> /// 过滤敏感字符。 业务逻辑层的方法。 /// </summary> /// <param name="str">原始字符</param> /// <returns>过滤后的字符</returns> private string strReplace(string str) ...{ string[] _str = System.Configuration.ConfigurationManager.AppSettings["replace"].Split(','); for (int i = 0; i < _str.Length; i++) ...{ str = str.Replace(_str[i], "***"); } return str; } /**//// <summary> /// 检查审核状态,并附加管理员留言到留言内容中。 业务逻辑层的方法 /// </summary> /// <param name="dt">原始数据表</param> /// <returns>处理后的数据表</returns> private DataTable getStateStr(DataTable dt,Page page) ...{ string str = string.Empty; //检查审核状态,如果KeepState==1,表示开启审核状态 if (KeepState == 1) ...{ foreach (DataRow dr in dt.Rows) ...{ // 如果管理员尚未登录 ,就将信息屏蔽掉, //如果管理员已经登录, 则显示信息,便于管理员确定是否需要审核 if (page.Session["Admin"] == null) ...{ if (dr["state"].ToString() == "False") ...{ dr["msgcontent"] = "<font color=red><center>--------------未审核------------</center></font>"; } } } } //附加管理员回复信息 foreach (DataRow dr in dt.Rows) ...{ if (dr["reply"].ToString().Trim() != "") ...{ string _str = "<br><font color=red><center>--------------管理员回复------------</center></font><br>"; _str += dr["reply"].ToString(); dr["msgcontent"] = dr["msgcontent"] + _str; } } return dt; } /**//// <summary> /// 管理员登录 业务逻辑层的方法 /// </summary> /// <param name="uid">管理员帐号</param> /// <param name="pwd">管理员密码</param> /// <returns>成功返回True,失败返回False</returns> public bool AdminLogin(string uid, string pwd) ...{ string _uid = System.Configuration.ConfigurationManager.AppSettings["uid"].ToString(); string _pwd = System.Configuration.ConfigurationManager.AppSettings["pwd"].ToString(); if (_uid == uid && pwd == _pwd) return true; else return false; } #endregion GuestBook 公用层/辅助层#region GuestBook 公用层/辅助层 /**//// <summary> /// 弹出对话框,但不会出现白屏页。 程序辅助层、公用层的方法 。 /// </summary> /// <param name="page">传入Page</param> /// <param name="msg">消息内容</param> public void ShowMeaages(Page page, string msg) ...{ string str = "<script >alert('" + msg + "');</script>"; page.RegisterStartupScript("msg", str); } #endregion }}