ASP.NET所谓得三层分层的小解

下面是一个完整的留言板数据层和逻辑层的代码。表现层就直接用你的aspx页面就可以了!

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
    {
        #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
        #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
        #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
        #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
        #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
    }
}

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值