打造自己的留言板
作者:天啦
ASP+ 是MS公司推出的一种全新Web编程方式,很多人以为ASP+
就是简单的ASP的升级,或者是ASP4.0。实际上,两种是绝然不同的东西,ASP只是一种利用脚本语言进行WEB开发的工具,很多情况下是面向结构,而ASP+
是一种完全的编程语言,其最大的特点就是面向对象,它具有面向对象语言的一切特性:类、封装、继承、多态性等等,接受这门语言对传统的ASP程序员来说,最重要的就是转变编程思想,传统的ASP编程是ASP代码和HTML混合使用,这样虽然灵活性有所提高,但是程序显得杂乱无章,而且可复用性很差,本文将利用ASP+
和ASP制作一个简单的留言板来做一个比较,从而找出两者之间的不同之处和优缺点。先来分析留言板的结构:
这个留言板主要有三个功能模块:
(1)列出留言列表
(2)列出具体某个留言的内容
(3)添加留言
先介绍留言板的表结构:
表:notepage
Table1
我们分别来介绍两种实现方式:
Asp制作留言板的实现方式:在HTML中嵌入ASP代码或者用ASP写出HTML代码,各个模块分别用ASP来实现。
ASP+
制作留言板的实现方式:先构造一个留言板对象,然后把留言板的可能使用到的属性和方法封装在这个类中,用WEBForm的方式做表现层,利用CodeBehind用对应的CS
来做业务逻辑层,同时利用一个Conn的Class封装了对数据库的访问,形成数据层,从而实现严格的三层结构。
数据库部分:
由于只是要比较两种开发方式的不同,所以数据库方面我们使用了相同的存储过程和表结构,但是在数据库连接方面两者还是有所不同的。
Asp实现的方法:在一个包含文件中包含数据库连接文件,在里面定义了两个函数:myConnOpen和myConnClose分别用来打开和关闭数据库。
MyconnOpen.asp: <%
Set conn = Server.CreateObject("ADODB.CONNECTION")
Sub MyConnOpen()
conn.open "Driver = {sql server};Server = mygod;Database = note;uid=sa;pwd=; "
End Sub
Sub MyConnClose()
Conn.close
set Conn = nothing
End Sub
%>
Asp+实现的方法:用一个Class来定义数据库连接。
Conn.cs namespace
notpage { using
System; using System.Data.SQL
; ///
<SUMMARY>
/// Summary description for
myconnOpen. ///
</SUMMARY> Public class
myconn:System.Data.SQL.SQLConnection
{ public myconnOpen()
{ this.Database = "back"
;
this.DataSource = "LUOCHANG"
;
this.UserID = "sa"
;
this.Password = "" ;
}} }
其它页面表现部分:
ASP的实现方法:各个部分使用各个不同的ASP实现。
列出留言列表:List.asp
<!--#include virtual = "conn.asp"-->
<%
sql = "'n_GetTopicList'"
MyconnOpen()
set Rs=Server.CreateObject("ADODB.RECORDSET")
set rs = conn.execute(sql)
If not rs.eof and not rs.BOF then
Response.Write "<TABLE WIDTH=90% HEIGHT=1 BORDER=0 CELLSPACING=2 CELLPADDING=2><TR>"
Response.Write "<TD>主题</TD><TD>留言人</TD><TD>留言时间</TD>"
Do while not rs.EOF
Response.Write "<tr><td><a href = Content.asp?id="&rs(0)&">" &rs("title")& "</a></td>"<br>
Response.Write "<td>" & rs("author") &"</td>"
Response.Write "<td>" & rs("adddate")&" </td></tr>"
Next
Else
Response.Write "对不起,还没有留言"
End if
MyconnClose()%>
察看留言的详细信息:根据传递的ID号在数据库中找的详细信息,然后列出来。
<!--#include virtual = "conn.asp"-->
<%
intID = Request.Form("id")
sql = "'n_GetTopicInfo','"&intID&"'"
Myconn()
set Rs=Server.CreateObject("ADODB.RECORDSET")
set rs = conn.execute(sql)
If not rs.eof and not rs.BOF then
str = "<p align=center><font color=red><b>察看留言</b></font></p><br>" &_
"<p align=left><font color=blue>留言主题:"&Rs("Title")&"<br>"&_
"留言时间:"&Rs("adddate")&"<br></font><font color=blue>留言人:"&Rs("Author")&"</font></p>"&_
"留言内容:"&Rs("Content")
Response.Write Str
Else
Response.Write "数据没有找到"
End if
MyconnClose()%>
添加留言:利用一个Form中填入信息,然后Post到另一个ASP文件中处理。
填充页面(略):
……
处理的程序:addTopic.asp
<!--#include virtual = "conn.asp"-->
<%Dim Title
Dim Content
Dim Author
Title = Request.Form("Title")
Cotent = Request.Form("Content")
Author = Request.Form("Author")
sql = "'n_addtopic','"&Title&"','"&Author&"','"&Content&"'"
MyconnOpen()
conn.execute(sql)
Response.Write "成功添加留言!"
Myconnclose()
%>
而在ASP+中处理方式就完全不同了,开始已经提到了,我们将把功能模块封装到Class中,然后在其他webForm中使用。
先介绍这个Class(由于篇幅限制这里只列出一部分代码)
namespace notpage
{ using System; using
System.Data.SQL ; using
System.Data ; using
System.Collections ; public class
notepage
{ //私有变量
private
int n_intID; //ID编号
private string
n_strTitle; //主题
private string
n_strAuthor; //留言人
private string
n_strContent; //留言内容
private DateTime
n_dateTime; //留言时间
......................(此处定义属性)
//构造函数,将留言的属性放置在其中
public
notepage()
{ this.n_intID = 0
;
this.n_strTitle = ""
;
this.n_strAuthor = ""
;
this.n_strContent = ""
;
this.n_dateTime =
System.DateTime.Now;}
///
<SUMMARY>
///
目的:取得留言的内容
///</SUMMARY>
/// 留言的ID号
public notepage
GetTopic(int a_intID)
{ //读取数据库
myconn myConn
= new myconnOpen();
SQLCommand
myCommand = new SQLCommand() ;
myCommand.ActiveConnection = myConn ;
myCommand.CommandText = "n_GetTopicInfo"
; //调用存储过程
myCommand.CommandType = CommandType.StoredProcedure
;
myCommand.Parameters.Add(new SQLParameter("@a_intTopicID" ,
SQLDataType.Int)) ;
myCommand.Parameters["@a_intTopicID"].Value = a_intID
;
notepage
objNp = new notepage();
myConn.Open()
;
SQLDataReader
myReader ;
myCommand.Execute(out myReader) ;
if
(myReader.Read())
{ objNp.ID = (int)myReader["ID"] ;
objNp.Title
= (string)myReader["Title"] ;
objNp.Author =
(string)myReader["Author"] ;
objNp.Content
= (string)myReader["Content"];
objNp.adddate
= (DateTime)myReader["adddate"];}
//清场
myReader.Close();
myConn.Close() ;
///
<SUMMARY>
/// ///
目的:将留言的内容入库
/// ///
利用构造函数来传递信息
///
</SUMMARY>
/// 一个留言的对像
public bool
AddTopic(notepage n_Topic)
{ //读取数据库
myconn
myConn = new myconnOpen();
SQLCommand
myCommand = new SQLCommand() ;
myCommand.ActiveConnection
= myConn ;
myCommand.CommandText
= "n_addTopic" ; //调用存储过程
myCommand.CommandType
= CommandType.StoredProcedure ;
myCommand.Parameters.Add(new
SQLParameter("@a_strTitle" , SQLDataType.VarChar,100))
;
myCommand.Parameters["@a_strTitle"].Value
= n_Topic.Title ;
myCommand.Parameters.Add(new
SQLParameter("@a_strAuthor" , SQLDataType.VarChar,50))
;
myCommand.Parameters["@a_strAuthor"].Value
= n_Topic.Author ;
myCommand.Parameters.Add(new
SQLParameter("@a_strContent" , SQLDataType.VarChar,2000))
;
myCommand.Parameters["@a_strContent"].Value
= n_Topic.Content ;
myConn.Open()
;
myCommand.ExecuteNonQuery()
;
//清场
myConn.Close()
;
return
true; }
///
<SUMMARY>
///
取的贴子列表
///
</SUMMARY>
///
///
返回一个Topic数组
///
public
ArrayList GetTopicList()
{ //定义一个forum数组做为返回值
ArrayList
arrForumList =new ArrayList() ;
//从数据库中读取留言列表
myconn
myConn = new myconnOpen();
SQLCommand
myCommand = new SQLCommand() ;
myCommand.ActiveConnection
= myConn ;
myCommand.CommandText
= "n_GetTopicList" ; //调用存储过程
myCommand.CommandType
= CommandType.StoredProcedure ;
myConn.Open()
;
SQLDataReader
myReader ;
myCommand.Execute(out
myReader) ;
for
(int i = 0 ; myReader.Read() ; i++)
{ notepage
objItem = new notepage() ;
objItem.ID = myReader["ID"].ToString().ToInt32()
;
objItem.Title = myReader["Title"].ToString() ;
objItem.Author = myReader["Author"].ToString()
;
objItem.adddate = myReader["adddate"].ToString().ToDateTime();
objItem.Content =
myReader["Content"].ToString();
arrForumList.Add(objItem) ;}
myReader.Close();
myConn.Close()
;
Return
arrForumList ;}}}
}
这个类建立起来后,我们要实现的功能也就都封装在里面了,我们现在要做的是在WEBForm中引用类的方法属性来实现相应的功能。限于篇幅,这里仅仅介绍实现其中一个功能模块的做法——列出留言的详细内容。
首先,我们定义一个webForm做为表现层,把数据的表现定义好。
模块二:显示留言的详细内容:showTopic.aspx
<%@ Page language="c#" Codebehind="showTopic.cs" AutoEventWireup="false" Inherits="notpage.showTopic" %>
<FORM method=post runat="server">
<P align=center><FONT
color=red><B>察看留言</B></FONT></P><BR>
<P align=left><FONT color=blue>留言主题:<ASP:LABEL id=n_tdtitle runat="Server"
forecolor="Black"></ASP:LABEL>
<BR>留言时间:<ASP:LABEL id=n_tdAdddate runat="Server"
forecolor="Black"></ASP:LABEL><BR></FONT><FONT
color=blue>留言人: <ASP:LABEL
id=n_tdAuthor runat="server"
forecolor="Black"></ASP:LABEL><BR>留言内容:<ASP:LABEL id=n_tdContent
runat="Server"
forecolor="Black"></ASP:LABEL>
</FONT></P></FORM>
接着,在它的CodeBehind中有一个相同名称的CS文件:showTopic.cs来处理其中的业务逻辑,也就是业务逻辑层。
对应的CS——showTopic.cs
namespace notpage
{(...............此处引用一些常用的类) ///
<SUMMARY>
/// Summary description for
showTopic. ///
</SUMMARY> public class showTopic
: System.Web.UI.Page
{ protected System.Web.UI.WebControls.Label
n_tdAuthor; protected
System.Web.UI.WebControls.Label td;
protected System.Web.UI.WebControls.Label
n_tdContent;
protected System.Web.UI.WebControls.Label
n_tdAdddate;
protected System.Web.UI.WebControls.Label
n_tdtitle; protected
System.Web.UI.WebControls.Label n_ttitle;
public showTopic()
{ Page.Init += new
System.EventHandler(Page_Init); }
protected void Page_Init(object sender, EventArgs
e) { int
int_ID;
int_ID =
Request.QueryString["ID"].ToInt32();
notepage np = new
notepage();
notepage objNp =
np.GetTopic(int_ID);
n_tdtitle.Text =
objNp.Title.ToString();
n_tdContent.Text =
objNp.Content.ToString();
n_tdAuthor.Text =
objNp.Author.ToString();
n_tdAdddate.Text =
objNp.adddate.ToString();
InitializeComponent();
} ///
<SUMMARY>
/// Required method for Designer support - do not
modify
/// the contents of this method with the code
editor. ///
</SUMMARY> private
void InitializeComponent()
{ this.Load += new System.EventHandler
(this.Page_Load);}}}
这样显示留言详细信息的功能就完成了,读者应该注意到,这里取得留言的详细信息的功能是利用前面定义的Class的方法GetTopic来实现的。
通过比较我们可以很清楚的看到:ASP+
制作一个简单的留言板,也许它在实现上没有用ASP来得简单方便,但是它确实完完全全的面向对象编程。随着互联网的飞速发展的,面向对象的语言和方法将起到越来越重要的作用,所以掌握面向对象的思想对WEB程序员是十分重要的,在以后我的系列中,将会加重对ASP+的介绍,希望能对读者有所启迪,也希望大家能Email给我您的建议,希望和大家一起进步。
责任编辑:敖剑
|