/**/
/******************************************************************
*
* 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
}
}
*
* 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
}
}