用Asp.net實現基於XML的留言簿

iDotNetSpace發表於2009-01-05
 一.概要:

  留言簿是網站的一個重要組成部分,是訪問者發表意見的場所,也是網站管理員瞭解網站基本情況的有力工具。所以留言簿在現在的網站中扮演了重要的角色。

  可是在以前開發一個留言簿並不是一件容易的事,開發者的工作量往往會很多。而現在隨著微軟推出VS.net,相應的技術推陳出新。特別是XML在.net Framework中的廣泛運用,使得整個.net構架具有十分優越的基礎。在VS.net推出的同時,也伴隨而來了一門新興的語言C#。C#作為微軟.net戰略的重要部分,具有特別優秀的效能。所以本文的asp.net程式是用C#語言描述的,同時整個程式又是基於XML的。我用到了XML作為程式的資料庫,主要是因為所以的伺服器都是支援XML檔案的。

  二.要求:

  (1) .Net SDK Beta2及以後版本

  (2) 支援Asp.net的Web伺服器

  三.說明:

  本文的例項由兩部分組成:

  (1) guestpost.aspx-將使用者資訊新增到一個XML檔案中

  (2) viewguestbook.aspx-先建立一個資料集物件,建立後,就很容易顯示其中的資料了。我這裡用到了一個“Repeater”來顯示資料集中的資料。還有,讀者可試著根據自己的喜好來修改檢視頁。

  四.程式碼:

  (1) guestpost.aspx:

   < %@ Page Language="C#" EnableSessionState="False" % >
  < %@ Import Namespace="System" % >

  < %@ Import Namespace="System.IO" % >

  < %@ Import Namespace="System.Data" % >

  < %-- 這些是本程式正常運用所必須的名字空間 --% >

  < html >

  < head >

  < title >歡迎來到我的留言簿< /title >

  < script. Language="C#" runat="server" >

  ///< summary >

  /// 當提交(submit)按鈕按下後,調要這個函式

  ///< /summary >

  public void Submit_Click(Object sender, EventArgs e)

  {

  //儲存資料的XML檔案的路徑

  //如果你的路徑和下面的不同,則請修改之

  string dataFile = "db/guest.xml" ;

  //運用一個Try-Catch塊完成資訊新增功能

  try{

  //僅當頁面是有效的時候才處理它

  if(Page.IsValid){

  errmess.Text="" ;

  //以讀的模式開啟一個FileStream來訪問資料庫

  FileStream fin;

  fin= new FileStream(Server.MapPath(dataFile),FileMode.Open,

  FileAccess.Read,FileShare.ReadWrite);

  //建立一個資料庫物件

  DataSet guestData = new DataSet();

  //僅從資料庫讀取XML Schema

  guestData.ReadXmlSchema(fin);

  fin.Close();

  //從資料集的Schema新建一個資料行

  DataRow newRow = guestData.Tables[0].NewRow();

  //用相應值填寫資料行

  newRow["Name"]=Name.Text;

  newRow["Country"]=Country.Text;

  newRow["Email"]=Email.Text;

  newRow["Comments"]=Comments.Text;

  newRow["DateTime"]=DateTime.Now.ToString();

  //填寫完畢,將資料行新增到資料集

  guestData.Tables[0].Rows.Add(newRow);

  //為資料庫檔案新建另一個寫模式的FileStream,並儲存檔案

  FileStream fout ;

  fout = new FileStream(Server.MapPath(dataFile),FileMode.Open,

  FileAccess.Write,FileShare.ReadWrite);

  guestData.WriteXml(fout, XmlWriteMode.WriteSchema);

  fout.Close();

  //隱藏當前的皮膚

  formPanel.Visible=false;

  //顯示帶有感謝資訊的皮膚

  thankPanel.Visible=true;

  }

  }

  catch (Exception edd)

  {

  //捕捉異常

  errmess.Text="寫入XML檔案出錯,原因:"+edd.ToString() ;

  }

  }

  < /script. >

  < LINK href="mystyle.css" type=text/css rel=stylesheet >

  < /head >

  (2) viewguestbook.aspx:

  < %@ Page Language="C#" % >

  < %@ Import Namespace="System" % >

  < %@ Import Namespace="System.IO" % >

  < %@ Import Namespace="System.Data" % >

  < %-- 以上是所需的名字空間 --% >

  < html >

  < head >

  < title >歡迎來到我的留言簿< /title >

  < script. language="C#" runat=server >

  //頁面下載完畢後,執行這個指令碼

  public void Page_Load(Object sender, EventArgs e)

  {

  //包含所有資料的XML檔案的路徑

  //如果你的路徑和下面的不同,則請修改

  string datafile = "db/guest.xml" ;

  //運用一個Try-Catch塊完成資訊讀取功能

  try

  {

  //建立一個資料集物件

  DataSet guestData = new DataSet();

  //為資料庫檔案開啟一個FileStream

  FileStream fin ;

  fin = new FileStream(Server.MapPath(datafile),FileMode.Open,

  FileAccess.Read,FileShare.ReadWrite) ;

  //把資料庫中內容讀到資料集中

  guestData.ReadXml(fin);

  fin.Close();

  //將第一個表中的資料集付給Repeater

  MyDataList.DataSource = guestData.Tables[0].DefaultView;

  MyDataList.DataBind();

  }

  catch (Exception edd)

  {

  //捕捉異常

  errmess.Text="不能從XML檔案讀入資料,原因:"+edd.ToString() ;

  }

  }

  < /script. >

  < LINK href="mystyle.css" type=text/css rel=stylesheet >

  < /head >

  五.總結:

  這個程式完成了,相信大家對實現原理以及技巧都有了大致的瞭解。通過本文,我主要是想向大家展示用XML處理一些資料庫問題時的優點:伺服器都支援XML檔案,而且處理過程相當簡潔明瞭。當然,用XML也有它的不足之處,就是當資料庫很大時,解析過程會花費相當長的時間,因此還是要採用大型的資料庫系統的。所以,我只想通過此文起到拋磚引玉的作用。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-526848/,如需轉載,請註明出處,否則將追究法律責任。

相關文章