?? bbsmanager.cs
字號:
?using System;
using System.Data;
using System.Data.SqlClient;
using System.Text;
using System.Xml;
using System.IO;
/// <summary>
/// 論壇類別的操作類
/// </summary>
public class BBSManager
{
//定義常量表示字段名稱或SQL語句。
private const string SQL_INSERT_BBSINFO = "INSERT INTO bbsinfo VALUES "+
"(@title,@filename,@posttime,@replycount,@lastreplytime, @postuser,@categoryid)";
private const string PARM_BBS_TITLE = "@title";
private const string PARM_BBS_FILENAME = "@filename";
private const string PARM_BBS_POSTTIME = "@posttime";
private const string PARM_BBS_REPLYCOUNT = "@replycount";
private const string PARM_BBS_LASTREPLYTIME = "@lastreplytime";
private const string PARM_BBS_POSTUSER = "@postuser";
private const string PARM_BBS_CATEGORYID = "@categoryid";
private string xmlfilename = "";
public BBSManager()
{
}
/// <summary>
/// 添加論壇的類別
/// </summary>
/// <param name="name">類別名稱</param>
/// <param name="des">類別描述信息</param>
/// <returns>添加是否成功</returns>
public bool AddBBSCategory(string name,string des )
{
//使用StringBuild連接字符串比使用“+”效率高很多
StringBuilder strSQL = new StringBuilder();
//創建論壇添加方法的參數
SqlParameter[] newsParms = new SqlParameter[]{
new SqlParameter("@name", SqlDbType.NVarChar,20),
new SqlParameter("@des", SqlDbType.NVarChar,100)};
//創建執行語句的SQL命令
SqlCommand cmd = new SqlCommand();
// 依次給參數賦值
newsParms[0].Value = name;
newsParms[1].Value = des;
//遍歷所有參數,并將參數添加到SqlCommand命令中
foreach (SqlParameter parm in newsParms)
cmd.Parameters.Add(parm);
//獲取數據庫的連接字符串
using (SqlConnection conn = new SqlConnection(SqlHelper.ConnectionStringLocalTransaction))
{
//加載“添加類別”執行語句
strSQL.Append("Insert into BBSCategory values(@name,@des)");
//打開數據庫連接,執行命令
conn.Open();
//設置Sqlcommand命令的屬性
cmd.Connection = conn;
cmd.CommandType = CommandType.Text;
cmd.CommandText = strSQL.ToString();
//執行添加的SqlCommand命令
int val = cmd.ExecuteNonQuery();
//清空SqlCommand命令中的參數
cmd.Parameters.Clear();
//判斷是否添加成功,注意返回的是添加是否成功,不是影響的行數
if (val > 0)
return true;
else
return false;
}
}
/// <summary>
/// 將發帖內容保存到XML文件中的方法
/// </summary>
/// <param name="filename">XML文件路徑全名</param>
/// <param name="title">XML文件路徑全名</param>
/// <param name="content">XML文件路徑全名</param>
/// <param name="user">XML文件路徑全名</param>
public void AddXML(string filename,string title,string content,string user)
{
//初始化XML文檔操作類
XmlDocument mydoc = new XmlDocument();
//加載指定的XML文件
mydoc.Load(filename);
//添加元素-帖子主題
XmlElement ele = mydoc.CreateElement("title");
XmlText text = mydoc.CreateTextNode(title);
//添加元素-發帖時間
XmlElement ele1 = mydoc.CreateElement("posttime");
XmlText text1 = mydoc.CreateTextNode(DateTime.Now.ToString());
//添加元素-內容
XmlElement ele2 = mydoc.CreateElement("content");
XmlText text2 = mydoc.CreateTextNode(content);
//添加元素-發帖人
XmlElement ele3 = mydoc.CreateElement("postuser");
XmlText text3 = mydoc.CreateTextNode(user);
//添加文件的節點-msgrecord
XmlNode newElem = mydoc.CreateNode("element", "xmlrecord", "");
//在節點中添加元素
newElem.AppendChild(ele);
newElem.LastChild.AppendChild(text);
newElem.AppendChild(ele1);
newElem.LastChild.AppendChild(text1);
newElem.AppendChild(ele2);
newElem.LastChild.AppendChild(text2);
newElem.AppendChild(ele3);
newElem.LastChild.AppendChild(text3);
//將節點添加到文檔中
XmlElement root = mydoc.DocumentElement;
root.AppendChild(newElem);
//獲取文件路徑
int index = filename.LastIndexOf(@"\");
string path = filename.Substring(0, index);
//新文件名
path = path + @"\" + xmlfilename + "file.xml";
//文件創建后必須關閉,否則其他程序無法調用
FileStream mystream =File.Create(path);
mystream.Close();
//保存所有修改-到指定文件中:注意編碼語言的選擇
XmlTextWriter mytw = new XmlTextWriter(path,Encoding.Default);
mydoc.Save(mytw);
mytw.Close();
}
/// <summary>
///
/// </summary>
/// <param name="title"></param>
/// <param name="filename"></param>
/// <param name="replycount"></param>
/// <param name="categoryid"></param>
public void AddMsg(string title,string user,int categoryid)
{
//使用StringBuild連接字符串比使用“+”效率高很多
StringBuilder strSQL = new StringBuilder();
//獲取緩存參數,如果沒有,此方法會自動創建緩存列表
SqlParameter[] newsParms = GetParameters();
//創建執行語句的SQL命令
SqlCommand cmd = new SqlCommand();
// 依次給參數賦值
newsParms[0].Value = title;
//一個獲取文件名的私有方法
newsParms[1].Value = getFilename().ToString();
xmlfilename = getFilename().ToString();
//注意發布的日期取當日
newsParms[2].Value = DateTime.Now;
//默認添加的回復數是0
newsParms[3].Value = 0;
newsParms[4].Value = DateTime.Now;
newsParms[5].Value = user;
newsParms[6].Value = categoryid;
//遍歷所有參數,并將參數添加到SqlCommand命令中
foreach (SqlParameter parm in newsParms)
cmd.Parameters.Add(parm);
//獲取數據庫的連接字符串
using (SqlConnection conn = new SqlConnection(SqlHelper.ConnectionStringLocalTransaction))
{
strSQL.Append(SQL_INSERT_BBSINFO);
//打開數據庫連接,執行命令
conn.Open();
//設置Sqlcommand命令的屬性
cmd.Connection = conn;
cmd.CommandType = CommandType.Text;
cmd.CommandText = strSQL.ToString();
//執行添加的SqlCommand命令
int val = cmd.ExecuteNonQuery();
//清空SqlCommand命令中的參數
cmd.Parameters.Clear();
}
}
/// <summary>
/// 創建或獲取緩存參數的私有方法
/// </summary>
/// <returns>返回參數列表</returns>
private static SqlParameter[] GetParameters()
{
//將SQL_INSERT_NEWSINFO做為哈希表緩存的鍵值
SqlParameter[] parms = SqlHelper.GetCachedParameters(SQL_INSERT_BBSINFO);
//首先判斷緩存是否已經存在
if (parms == null)
{
//緩存不存在的情況下,新建參數列表
parms = new SqlParameter[] {
new SqlParameter(PARM_BBS_TITLE, SqlDbType.NVarChar,50),
new SqlParameter(PARM_BBS_FILENAME, SqlDbType.NVarChar,100),
new SqlParameter(PARM_BBS_POSTTIME, SqlDbType.DateTime),
new SqlParameter(PARM_BBS_REPLYCOUNT, SqlDbType.Int),
new SqlParameter(PARM_BBS_LASTREPLYTIME, SqlDbType.DateTime),
new SqlParameter(PARM_BBS_POSTUSER, SqlDbType.NVarChar, 50),
new SqlParameter(PARM_BBS_CATEGORYID, SqlDbType.Int) };
//將新建的參數列表添加到哈希表中緩存起來
SqlHelper.CacheParameters(SQL_INSERT_BBSINFO, parms);
}
//返回參數數組
return parms;
}
/// <summary>
/// 更新數據庫中的回復時間
/// </summary>
/// <param name="infoid">帖子的ID</param>
/// <returns>是否更新成功</returns>
public bool UpdateMsg(int infoid)
{
//使用StringBuild連接字符串比使用“+”效率高很多
StringBuilder strSQL = new StringBuilder();
//創建論壇添加方法的參數
SqlParameter[] newsParms = new SqlParameter[]{
new SqlParameter("@lastposttime", SqlDbType.DateTime),
new SqlParameter("@infoid", SqlDbType.Int)};
//創建執行語句的SQL命令
SqlCommand cmd = new SqlCommand();
// 依次給參數賦值
newsParms[0].Value = DateTime.Now;
newsParms[1].Value = infoid;
//遍歷所有參數,并將參數添加到SqlCommand命令中
foreach (SqlParameter parm in newsParms)
cmd.Parameters.Add(parm);
//獲取數據庫的連接字符串
using (SqlConnection conn = new SqlConnection(SqlHelper.ConnectionStringLocalTransaction))
{
//加載“添加類別”執行語句
strSQL.Append("UPDATE bbsinfo SET replycount=replycount+1 , lastreplytime=@lastposttime WHERE infoid=@infoid");
//打開數據庫連接,執行命令
conn.Open();
//設置Sqlcommand命令的屬性
cmd.Connection = conn;
cmd.CommandType = CommandType.Text;
cmd.CommandText = strSQL.ToString();
//執行添加的SqlCommand命令
int val = cmd.ExecuteNonQuery();
//清空SqlCommand命令中的參數
cmd.Parameters.Clear();
//判斷是否添加成功,注意返回的是添加是否成功,不是影響的行數
if (val > 0)
return true;
else
return false;
}
}
/// <summary>
/// 給新建的xml文件起名
/// </summary>
/// <returns>返回的是最大號的ID+1</returns>
private int getFilename()
{
int cardrule = 0;
//設置SQL語句,取最大的ID值
string strsql = "select top 1 infoid from bbsinfo order by infoid desc ";
//調用SqlHelper訪問組件的方法返回第一行第一列的值
try
{
cardrule = (int)SqlHelper.ExecuteScalar(SqlHelper.ConnectionStringLocalTransaction, CommandType.Text, strsql, null);
//返回最大值+1
}
catch
{
//此時數據庫中無數據
cardrule = 0;
}
return cardrule +1;
}
/// <summary>
/// 更新回復內容
/// </summary>
/// <param name="filename">文件名</param>
/// <param name="title">回復主題</param>
/// <param name="content">回復內容</param>
/// <param name="user">回復人</param>
public void UpdateXml(string filename,string title,string content,string user)
{
//初始化XML文檔操作類
XmlDocument mydoc = new XmlDocument();
//加載指定的XML文件
mydoc.Load(filename);
//添加元素-帖子主題
XmlElement ele = mydoc.CreateElement("title");
XmlText text = mydoc.CreateTextNode(title);
//添加元素-發帖時間
XmlElement ele1 = mydoc.CreateElement("posttime");
XmlText text1 = mydoc.CreateTextNode(DateTime.Now.ToString());
//添加元素-內容
XmlElement ele2 = mydoc.CreateElement("content");
XmlText text2 = mydoc.CreateTextNode(content);
//添加元素-發帖人
XmlElement ele3 = mydoc.CreateElement("postuser");
XmlText text3 = mydoc.CreateTextNode(user);
//添加文件的節點-msgrecord
XmlNode newElem = mydoc.CreateNode("element", "xmlrecord", "");
//在節點中添加元素
newElem.AppendChild(ele);
newElem.LastChild.AppendChild(text);
newElem.AppendChild(ele1);
newElem.LastChild.AppendChild(text1);
newElem.AppendChild(ele2);
newElem.LastChild.AppendChild(text2);
newElem.AppendChild(ele3);
newElem.LastChild.AppendChild(text3);
//將節點添加到文檔中
XmlElement root = mydoc.DocumentElement;
root.AppendChild(newElem);
//保存所有的修改
mydoc.Save(filename);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -