欢迎访问华乐美文网

网上在线论坛毕业设计

毕业设计2019-07-08 22:31书业网

目录

1. 前言???????????????????????? 4

2. .NET技术?????????????????????? 4

2.1 发展背景???????????????????? 4

2.2 ASP.NET开发工具?????????????????4

2.3 ASP.NET处理架构?????????????????5

2.4 ASP.NET 内部的 HTTP 处理器有???????????5

2.5 事件模型?????????????????????6

2.6 应用程序层级对象?????????????????7 3 SQL Server技术????????????????????8

3.1基本信息?????????????????????8 4 开发背景:??????????????????????8

4.1需求分析:????????????????????8

4.2 系统设计?????????????????????9

4.2.1系统目标???????????????????9

4.2.2 系统功能结构?????????????????9

4.2.3业务流程图??????????????????9

4.2.4网站主要数据绑定控件技术分析 ????????10

4.2.5构建开发环境?????????????????12

4.2.6数据库设计??????????????????13

4.2.7系统页面预览及其解释?????????????14

4.2.8公共模块的设计????????????????37 5 参考文献???????????????????????39 致 谢?????????????????????????40

1 前言:

在当今互联网的深入发展,涉及到了生活的各个方面。网络在线系统,可以让生活中的人们相互更好的交流,让不在同一地区的人们在这个虚拟的环境中进行思想的交流与传递,让地球真正变成一个地球村。现在一些门户网站都有自己独立的网络在线论坛,给网站增添了不少的人气,同时也加快了信息的传递。同时一些企业公司等也有自己内部的网络在线论坛,方便公司员工进行技术、生活等问题的交流与相协助。

网络在线系统主要是针对网上流行的BBS,对其进行设计、分析,从实际需求出发,建立概念模型,同时设计合理的数据库实现方案。本系统采用IIS服务器,开发语言选用现在主流的开发语言之一C#+ASP.NET,开发工具是Microsoft Visual Studio 2005,后台数据库选用Microsoft SQL Server2005。本系统主要分两大模块:普通用户模块和管理员模块。该系统以Internet为平台,前台可使任何人注册、登陆在论坛上进行发帖及讨论,版主或者前台管理者也可以进行一部分管理。而管理员也可以在后台进行帖子及用户信息的相关的管理。其中运用了ASP.NET技术、ADO.NET技术、SQL SERVER数据库等等, 对上述技术的实现方法进行了详细的讨论。在WEB 服务器上,利用ASP.NET技术和ADO.NET 等技术。

首先还是从该技术的发展来深入。

2 .NET技术

2.1发展背景:

在2000年第二季时,微软正式推动.NET策略,ASP+也顺理成章的改名为ASP.NET,经过四年的开发,第一个版本的ASP.NET在2002年1月5日亮相(和.NET Framework 1.0),Scott Guthrie也成为ASP.NET的产品经理(到现在已经开发了数个微软产品,像ASP.NET AJAX和Microsoft Silverlight)。目前最新版本的 ASP.NET 4.0 以及 .NET Framework 4.0 仍在开发中。

2.2 ASP.NET开发工具:

ASP.net构架是可以用Microsoft(R)公司最新的产品 Visual Studio.net开发环境进行开发,WYSIWYG(What You See Is What You Get所见即为所得)的编

辑。这些仅是ASP.net强大化软件支持的一小部分。

ASP.NET的特点——强大性和适应性。因为ASP.net是基于通用语言的编译运行的程序,所以它的强大性和适应性,可以使它运行在Web应用软件开发者的几乎全部的平台上(笔者到现在为止只知道它只能用在Windows 2000/2003 Server/VISTA/7上)。通用语言的基本库,消息机制,数据接口的处理都能无缝的整合到ASP.net的Web应用中。ASP.net同时也是language-independent语言独立化的,所以,你可以选择一种最适合你的语言来编写你的程序,或者把你的程序用很多种语言来写,现在已经支持的有C#(C++和Java的结合体),VB,Jscript , C++、F++。将来,这样的多种程序语言协同工作的能力保护您现在的基于COM+开发的程序,能够完整的移植向ASP.net。ASP.NET一般分为两种开发语言,VB.NET和C#,C#相对比较常用,因为是.NET独有的语言,VB.NET则为以前VB程序设计,适合于以前VB程序员,如果新接触.NET,没有其他开发语言经验,建议直接学习C#即可。

2.3 ASP.NET处理架构

ASP.NET 运行的架构分为几个阶段: 在 IIS 与 Web 服务器中的消息流动阶段。 在 ASP.NET 网页中的消息分派。 在 ASP.NET 网页中的消息处理。

2.4 ASP.NET 内部的 HTTP 处理器有:

ISAPIRuntime:由 aspnet_isapi.dll 调用,初始化 HttpWorkerRequest 对象(会由IIS的版本决定要初始化的版本)。 HttpRuntime:提供要求队列 (Request Queue)、调用 HttpWorkerRequest 中的 ProcessRequest() 方法,以及后续的处理工作。 HttpWorkerRequest:产生 HttpApplication、HttpRequest、HttpResponse 等基础对象的 HTTP 要求对象,并将要求转送到要处理的对象(并调用它的 ProcessRequest() 方法)。 IHttpHandler 与 IHttpAsyncHandler:负责处理 HTTP 要求的单元,由 ProcessRequest() 来分派与运行要求。 ASP.NET网页中的事件程序 当 HttpWorkerRequest 调用 ASP.NET 网页 (System.Web.UI 命名空间的 Page 类) 的 Page.ProcessRequest() 方法时,它会依序的引发 Page 内的各个事件,并同时调用在 Page 中所有控件的相关事件,其引发顺序为:

PreInit 事件:运行预先初始化的工作,在ASP.NET 2.0中,若要动态调整主版页面 (Master Page)、布景主题 (Theme) 时,要在这个事件中调整。 Init 事件:运行初始化工作。 InitCompleted 事件:在完成初始化工作后引发。 Preload 事

件:运行预先加载的工作。 Load 事件:运行加载的工作,大多数的网页都拥有 Page_Load 事件处理程序,用户控件 (user control) 中也有 Page_Load 事件例程,都会在此时调用。 控件的 PostBack 变更通知:当网页侦测到是 PostBack 要求时,会引发 PostBack 消息通知的事件。 控件的 PostBack 相关事件:当网页侦测到是 PostBack 要求时,会引发 PostBack 消息指定的控件的事件。 LoadCompleted 事件:运行加载完成后的工作。 PreRender 事件:处理在产生 HTML 结果前的工作。 SaveStateCompleted 事件:处理页面状态 (ViewState 与 ControlState) 储存完成后的事件。 Render 事件:处理产生 HTML 的工作。 Unload 事件:处理退出网页处理时的工作。 如果 HttpWorkerRequest 调用的是实现 IHttpHandler 界面的 HTTP 处理程序 时,它只会调用 IHttpHandler.ProcessRequest() 方法,由它来处理程序的输出,不像 Page.ProcessRequest() 会处理事件顺序,因此 HTTP Handler 很适合轻量级的数据处理,像是输出文件数据流或是图片数据流等。

2.5 事件模型

ASP.NET 的原始设计构想,就是要让开发人员能够像 VB 开发工具那样,可以使用事件驱动式程序开发模式 (Event-Driven Programming Model) 的方法来开发网页与应用程序,若要以ASP技术来做到这件事的话,用必须要使用大量的辅助信息,像是查询字符串或是窗体字段数据来识别与判断对象的来源、事件流向以及调用的函数等等,需要撰写的代码量相当的多,但 ASP.NET 很巧妙利用窗体字段和JavaScript脚本把事件的传递模型隐藏起来了。

ASP.NET 的事件模型是由以及数个 Hidden Field 组合而成,基于 HTTP 模型的限制,所有的网页程序在运行结果输出到用户端后,程序就会退出运行,为了维护在 ASP.NET 网页与控件的状态数据,因此在输出 ASP.NET 控件时,ASP.NET 会将部份状态数据储存到网页的 Hidden Field 中,这类型的状态数据称为 ViewState(ID 为 __VIEWSTATE),在服务器端即会被解译出状态与事件数据。在大多数的内置 Web 控件中都有使用到这个机制,因此在使用大量 ASP.NET Web 控件的网页中,会有许多的 ViewState 会存放在网页中并随着 HTTP 数据流输出到用户端,ViewState 在输出时,会被加密为一组乱码字符串,其金钥值定义在计算机中,并且每一个对象都会被序列化 (serialize) 成字符串(因此若是自定义对象要放到 ViewState 时,则应要让它支持序列化),再输出

到 __VIEWSTATE 字段中,在每次的网页来回时都会被传输,较大的 ViewState 会让网页大小膨胀,不利于快速的网络传输,不过 ASP.NET 本身有提供将 ViewState 关闭的功能,因此如果控件不需要状态保存时,可将它关闭以减少输出的大小。

为确保控件的事件能够确实被引发,让事件驱动能够被运行,因此控件事件引发命令时需要的参数,是交由 JavaScript 脚本在用户端引发时,填入另一个 Hidden Field(ID 为 __EVENTTARGET 以及 __EVENTARGUMENT),并且引发窗体的送出指示 (submit),传送到服务端后,服务端的 HttpApplication 中的工具函数会解析 __EVENTTARGET 和 __EVENTARGUMENT 字段中的信息,并且交由控件所实现的 RaisePostBackEvent() 来引发事件,并由 .NET Framework 内部的事件处理器制接手处理(调用控件设置的事件处理程序)。

状态管理状态管理 (state management) 在Web应用程序中,一向是很重要的课题,良好的状态管理可以帮助开发人员发展出具有状态持续能力的应用程序(像是工作流程型应用程序或是电子商务应用程序),但状态管理功能会视应用程序的部署状态以及信息的共用程度来选择,在 ASP.NET 中,分为服务器端状态管理以及用户端状态管理,用户端状态管理为ViewState以及Cookies,服务端状态管理则是Session与Application对象。它们的差异点在于:

ViewState 是加密的数据流,和 HTML 一起输出到用户端。 Cookies 是加密(也可不加密)的小型数据,和 HTML 不同,它可以高速缓存在用户端浏览器中。 Session 是服务器端的状态保存机制,每个用户端均有独立的空间(以浏览器运行个体来赋与唯一的SessionID值)。 Application 是服务器端的状态保存机制,但应用程序所有的用户端共用同一份状态数据。

2.6 应用程序层级对象

Application 对象会在应用程序的 Application_OnStart 事件中初始化,并使用名称来识别数据(它是一个 NameObjectCollectionBase 集合的实现品),它会储存在应用程序的范围内,所有的连接(用户)都可以使用,属于共用型的储存体,适合储存所有用户都可使用的数据,在多人使用的情况下,可以适当的使用 Lock/Unlock 的机制来确保应用程序状态的更新。

Application.Lock();Application["PageRequestCount"]=((int)Application["PageRequestCount"])+1;Application.UnLock();

3 SQL Server技术

3.1基本信息

SQL Server 是一个关系数据库管理系统。它最初是由Microsoft、 Sybase 和Ashton-Tate三家公司共同开发的,于1988 年推出了第一个OS/2 版本。在Windows NT 推出后,Microsoft与Sybase 在SQL Server 的开发上就分道扬镳了,Microsoft 将SQL Server 移植到Windows NT系统上,专注于开发推广SQL Server 的Windows NT 版本。Sybase 则较专注于SQL Server在UNIX 操作系统上的应用。本系统主要采用SQL Server 2005。

SQL Server 2005 是一个全面的数据库平台,使用集成的商业智能 (BI) 工具提供了企业级的数据管理。SQL Server 2005 数据库引擎为关系型数据和结构化数据提供了更安全可靠的存储功能,使您可以构建和管理用于业务的高可用和高性能的数据应用程序。

SQL Server 2005 数据引擎是本企业数据管理解决方案的核心。此外 SQL Server 2005 结合了分析、报表、集成和通知功能。这使您的企业可以构建和部署经济有效的 BI 解决方案,帮助您的团队通过记分卡、Dashboard、Web services 和移动设备将数据应用推向业务的各个领域。

与 Microsoft Visual Studio、Microsoft Office System 以及新的开发工具包(包括 Business Intelligence Development Studio)的紧密集成使 SQL Server 2005 与众不同。无论您是开发人员、数据库管理员、信息工作者还是决策者,SQL Server 2005 都可以为您提供创新的解决方案,帮助您从数据中更多地获益。

4 开发背景:

4.1需求分析:

网上在线论坛面向的群体主要是学生,可以讨论关于生活和学习方面的各种经验和困难等,同时对于用户分为不同级别,根据用户的级别的不同在论坛中为用户分配不用的权限。同时BBS还需要拥有对各种信息管理的功能。通过对典型的网上在线论坛的考察,分析,要求本系统具有以下特点:

? 要求系统具有良好的人机界面;

? 功能强大,操作简单,扩展性强,稳定性搞;

? 对帖子进行分类,便于管理;

? 网站最大限度的实现易维护性和易操作性;

? 网上运行稳定,安全可靠。

4.2 系统设计

4.2.1系统目标

开发网上在线论坛最终目的是为用户提供一个良好的技术交流平台,得到用户的及时反馈。为了满足客户需要,本系统在设计师应实现一下几个目标:

? 系统界面友好,美观;

? 划分用户街边,将不同的权限划分给不同的用户;

? 合理管理论坛相关信息;

? 易于维护和扩展;

? 系统运行稳定、可靠。

4.2.2 系统功能结构:

网上在线论坛是一个典型的ASP.ENT应用程序。当进入论坛的首页后不论论坛的注册用户,还是普通游客,区别在于能否发帖,即功能不同,当然管理员拥有最高级别,拥有注册用户和游客的所有功能。功能结构如下图所示:

网上在线论坛功能结构图

4.2.3业务流程图

网上在线论坛的业务流程如下图所示:

网上在线论坛流程图 4.2.4网站主要数据绑定控件技术分析:

网上在线论坛的网站首页主要应用了GridView控件和DataList控件的两大关键技术——数据绑定技术和分页技术。

在动态网站开发过程中,经常需要在表格控件中查看一些基本信息。在网上在线论坛使用GridView和DataList控件,将帖子的基本信息绑定到页面上,且可以进行一般的管理操作。

在首页及其很多页面,都使用了GridView控件进行帖子的基本信息,详细信息应用DataList控件进行绑定。

首先看一下关于本网站GridView控件中的绑定和分页技术有关的属性、事件介绍如下:

? AllowPaging属性:获取或设置一个值,该值显示是否启用分页功能; ? DataSource属性:获取或设置对象,数据绑定控件从该对象中检索七数

据项列表哦;

? DataKeyNames属性:获取或设置一个数组,该数组包含了显示在

GridView控件中的项的主键字段的名称;

? DataKeys属性:获取一个Datakey对象集合,这些对象表示GridView控

件中每一行的数据键值;

? PageCount属性:获取偶GridView控件中显示数据源记录所需的页数; ? PageIndex属性:获取或设置当前显示页面的索引;

? PageSize属性:获取或设置GridView控件在每一个页面上显示的记录数; ? PageIndexChanging事件:在单击某一个页面导航一按钮时,在GridView

控件处理分页操作之前完成。

? 然后在详细信息界面使用了DataList控件,然后显示帖子的详细信息和

回复信息,其属性和时间如下:

? DataSource:有DataBind的地方,就应该有DataSource。如果没有指定

DataSource而执行DataBind,那DataGrid将什么也不会显示。DataSource一般是DataSet、DataTable或者DataView。当然也可以绑定DataReader或者其他实现IEnumerable的类;

? DataKeys:获取一个Datakey对象集合,这些对象表示DataList控件中

每一行的数据键值;

? DataKeyField:一般设置为数据表的Unique字段(否则就没意义了),通

过DataKey可以得到这一行对应的关键字段的值;

? DataKeys:DataKey的集合,通过行的索引来读取相应行的DataKey; ? EditItemIndex,SelectedIndex,CurrentPageIndex,SelectedItem:这些属

性都很好理解,看名字就知道是什么意思,需要注意的是,设置了EditItemIndex或者CurrentPageIndex后需要重新执行DataBind方法(当然,前面提到过,还需要设置DataSource);

? Columns:Columns就是Columns,列的集合,可以设置列的属性,包括

Visible、HeaderText、FooterText、SortExpression等。需要指明的是自动生成的列,是不包含在Columns中的。只有在.aspx中显示声明的列和在代码中添加的列才会被包含在其中;

? Items:Items是DataGridItem的集合,可以遍历当前DataGrid中显示数

据的DataGridItem;

? ItemIndex :得到行在Items中的索引;

? ItemType : 返回行的类型,也就是上面列出的Header、Item、...、Pager;

? ItemCommand、CancelCommand、DeleteCommand、EditCommand、

UpdateCommand

也就是DataGrid中,点击Button、LinkButton后执行的事件,执行的事件取决于按钮的CommandName。其实最主要的一个是ItemCommand,而后面四个都只是ItemCommand的一小部分,

比如一个按钮的CommandName为"Cancel",当返回后,首先执行的是ItemCommand事件,然后才是CancelCommand事件。

? PageIndexChanged:如果你的DataGrid是分页的,那当你在DataGrid上

点击Pager上的1、2、3或者<、>时,就会激发这个事件。在这个事件里面,你可以用e.NewPageIndex来读取要改变的页,然后赋值给DataGrid的CurrentPageIndex属性,最后不要忘了,还要设置DataSource,还要执行DataBind。注意:DataList中没有这个事件,如果需要在DataList中分页,可以一段一段的读取数据,然后把当前段的数据绑定到DataList上。

? ItemDataBound,ItemCreated:首先要分析的是这两个事件的发生时间。

ItemDataBound,只要执行了DataBind方法,就会马上激发这个事件。ItemCreated 呢,如果页面是第一次访问(Page.IsPostBack = false),那在第一次执行DataBind的时候,会先激发ItemCreated事件,也就是说,执行了DataBind后,首先会用 ItemCreated来建立Header行,然后用ItemDataBound来绑定Header行,再用ItemCreated来建立第一行,再调用 ItemDataBound来绑定第一行,也就是说ItemCreated和ItemDataBound是交替执行的。页面返回时,也会执行ItemCreated事件,在Page_Load之前,但是这时候就不会再执行ItemDataBound事件了。

4.2.5构建开发环境:

网站开发环境:Microsoft Visual Studio 2005 集成开发环境; 网站开发语言:ASP.ENT,C#,SQL; 网站后台数据库:SQL Server 2005;

开发环境运行平台:Windows XP(SP2)/ Windows XP(SP3)Windows 2000(SP4)/Windows Server 2003(SP1)/Windows 7;

服务器端

操作系统:Windows Server 2003(SP1); Web服务器:Internet 信息服务(IIS)管理器; 数据库服务器:SQL Server2005; 浏览器:IE6.0/FireFox3.0以上;

网站服务器运行环境:Microsoft .NET Framework SDK v2.0。 客户端:

浏览器:Internet Explorer 6.0及其以上版本; 分辨率:最佳效果1024*768像素。 4.2.6数据库设计

本系统采用SQL Server 2005数据库,名称为:db_Discuss.mdb,其中包含6张表。下面为数据库逻辑结构设计。

数据库的物理设计:

帖子相关信息表:

4.2.7系统页面预览及其解释:

图1 网上在线论坛MasterPage.master页面

图1注释:在Asp.net 2.0中,提供了一个MasterPage的功能,它可以让我们很

方便的完成页面的整体结构相同的网站,而且后期修改界面的时候只要修改一下MasterPage即可,所以本系统很多页面都采用了模版,便于以后的维护和二次开发。本页面主要采用模版,用Table进行布局,然后将各个用户控件拖入到模板页。

图2网上在线论坛用户控件Canlendar.ascx页面

图2注释:本页面就是一个calendar控件,然后就是多个链接滚动,主要由<marquee direction="up" onmouseout="this.start()" onmouseover="this.stop()" scrollAmount="2" scrollDelay="7" style="width: 166px; height: 201px"></marquee>实现,然后就是关于在线咨询,用超链接用WebQQ来实现,主要代码为<a target="_blank"href="http://wpa.qq.com/msgrd?v=3&uin=312665964&site=qq&menu=yes"><img border="0" src=" http://wpa.qq.com/pa?p=2:312665964:41" alt="点击这里给我发消息" title="点击这里给我发消息"></a>来实现。

图3网上在线论坛首页Default.aspx页面

图3注释:本页面主要采用了GridView控件来实现,先对各个列进行手动数据绑定,与相应的数据库列对应,对于最后一列,主要添加HyperLinkFirld,在DataNavigateUrlFirld指定传递的参数列,然后在DataNavigateUrlFormatString传递参数ForumsInfo.aspx?id={0},主要代码如下:

public void GridViewBind() {

SqlConnection conn = DB.CreateConnection();

string SqlString = "select a.*,b.* from tb_Posts as a join tb_Content as b on a.PostsId=b.PostsId order by CreateTime desc"; conn.Open(); try {

SqlDataAdapter da = new SqlDataAdapter(SqlString, conn); DataSet ds = new DataSet(); da.Fill(ds, "tb_Content"); GridView1.DataSource = ds; if (ds.Equals(null)) {

Response.Write("记录为空!"); }

GridView1.DataBind(); }

catch (Exception ex) {

Response.Write(ex.Message); }

finally

{

conn.Close();

}

这样就可以跳转到详细信息页面上,正如图4所示:

图4网上在线系统帖子详细信息界面

图4 注释:本页面主要运用了DataLis控件,同样的先将所有的列进行数据绑定,对于图3传过来的参数,首先接收:

//绑定发帖人的信息

private void DataList1DataBind()

{

//接收图3传过来的参数,然后进行查询

int id = Convert.ToInt32(Request.QueryString["id"]);

string sqlstring = "select top 1 a.*,b.* from tb_Content as a join tb_Users as b on a.UserName=b.UserName where a.ContId="+id +""; SqlConnection conn = DB.CreateConnection();

conn.Open();

try

{

SqlDataAdapter da = new SqlDataAdapter(sqlstring , conn); DataSet ds = new DataSet();

da.Fill(ds, "tb_Content");

DataList1.DataSource = ds;

DataList1.DataBind();

}

catch (Exception e)

{

Response.Write(e.Message);

}

finally

{

conn.Close();

}

//绑定回复的信息帖子同时进行分页处理

private void Datalist2BataBind()

{

int id = Convert.ToInt32(Request.QueryString["id"]);

string Sqlstr = "select a.*,b.* from tb_hf as a join tb_Users as b on a.UserName = b.UserName where a.ContId="+id +"";

int CurrentPage = Convert.ToInt32(Label27.Text);

PagedDataSource ps = new PagedDataSource();

SqlConnection conn = DB.CreateConnection();

conn.Open();

SqlDataAdapter da = new SqlDataAdapter(Sqlstr ,conn ); DataSet ds = new DataSet();

da.Fill(ds, "tb_hfxinxi");

ps.DataSource = ds.Tables["tb_hfxinxi"].DefaultView; ps.AllowPaging = true;

ps.PageSize =10;

ps.CurrentPageIndex = CurrentPage - 1;

lbnshouye.Enabled = true ;

lbnshangyiye.Enabled = true;

lbnxiayiye.Enabled = true ;

lbnweiye.Enabled = true ;

if (CurrentPage == 1)

{

lbnshouye.Enabled =false ;

lbnshangyiye.Enabled = false;

}

if (CurrentPage == ps.PageCount)

{

lbnxiayiye.Enabled = false;

lbnweiye.Enabled = false;

}

DropDownList1.Items.Clear();

this.Label29.Text = Convert.ToString(ps.PageCount);

int sums = Convert.ToInt32(this.Label29.Text.Trim()); for (int i = 1; i <= sums; i++)

{

DropDownList1.Items.Add(new ListItem(Convert.ToString(i), Convert.ToString(i)));

}

this.DropDownList1.SelectedValue = this.Label27.Text; this.DataList2.DataSource = ps;

this.DataList2.DataKeyField = "ContId";

this.DataList2.DataBind();

//假如绑定的页数等于1,则禁用首页和上一页和下一页和尾页的按钮和不显示下拉框

if (Label29.Text == "1")

{

this.Label40.Visible = false;

this.DropDownList1.Visible = false;

this.Label41.Visible = false;

}

else

{

this.Label40.Visible = true;

this.DropDownList1.Visible = true;

this.Label41.Visible = true;

}

conn.Close();

}

//返回到首页

protected void lbnshouye_Click(object sender, EventArgs e) {

this.Label27.Text = "1";

Datalist2BataBind();

}

//返回到上一页

protected void lbnshangyiye_Click(object sender, EventArgs e) {

this.Label27.Text = Convert.ToString(Convert.ToInt32 (this.Label27 .Text )-1);

Datalist2BataBind();

}

//返回到下一页

protected void lbnxiayiye_Click(object sender, EventArgs e) {

this.Label27.Text = Convert.ToString(Convert.ToInt32 (this.Label27.Text )+1);

Datalist2BataBind();

}

//返回到尾页

protected void lbnweiye_Click(object sender, EventArgs e) {

this.Label27.Text = this.Label29.Text;

Datalist2BataBind();

}

//帖子被浏览次数

public void number()

{

int Contid = Convert.ToInt32(Request.QueryString["id"]); SqlConnection conn = DB.CreateConnection();

string sqlstr = "select * from tb_Content where ContId='"+Contid +"'";

try

{

conn.Open();

SqlCommand com = new SqlCommand(sqlstr, conn);

SqlDataReader dr = com.ExecuteReader();

dr.Read();

if (dr.HasRows)

{

int hitcount = Convert.ToInt32(dr["HitCount"]); hitcount = hitcount + 1;

dr.Close();

string sqlstring = "update tb_Content set HitCount='" + hitcount + "' where ContId='"+Contid +"'";

SqlCommand comm = new SqlCommand(sqlstring, conn); comm.ExecuteNonQuery();

}

}

catch (Exception ex)

{

throw new Exception(ex.Message);

}

finally

{

conn.Close();

}

}

//回复留言

protected void tbntijiao_Click(object sender, EventArgs e) {

int id = Convert.ToInt32(Request.QueryString["id"]);

if (Session["UserName"] == null && Session["UserPwd"] == null) {

Response.Write("<script language='javascript'>alert('对不起,您还没有登录,请到本页面顶部登录后再回复留言!');</script>"); }

else

{

SqlConnection conn = DB.CreateConnection();

string head = this.txtHead.Text;

string Content = this.txtConten.Text;

string username = Session["UserName"].ToString(); DateTime time = new DateTime();

time =DateTime.Now;

string sqlstr = "select * from tb_Content where ContId='" + id + "'";

conn.Open();

SqlCommand comn = new SqlCommand(sqlstr, conn);

SqlDataReader dr = comn.ExecuteReader();

dr.Read ();

int Upperid = Convert.ToInt32(dr["UpperId"]);

Upperid += 1;

dr.Close();

string Sqlstr = "INSERT INTO

tb_hf(ContId,hfSubject,hfnr,UserName,hftime) VALUES ("+id +",'"+head +"','"+Content+"','"+username +"','"+time+"')";

string sqlstring = "update tb_Content set LastAnswerTime='" + time + "' ,UpperId=" + Upperid + " where ContId='" + id + "'"; SqlCommand com = new SqlCommand(Sqlstr,conn );

SqlCommand comm = new SqlCommand(sqlstring ,conn ); try

{

//conn.Open();

int i = com.ExecuteNonQuery();

int j = comm.ExecuteNonQuery();

if (i > 0 && j>0 )

{

Response.Write("<script

language='javascript'>alert('回复成功!');</script>");

Datalist2BataBind();

DataList1DataBind();

this.txtHead.Text = string.Empty;

this.txtConten.Text = string.Empty;

}

else

{

Response.Write("<script

language='javascript'>alert('回复失败,请重试!');</script>"); }

}

catch (Exception ex)

{

Response.Write(ex.Message);

}

finally

{

conn.Close();

}

}

}

//绑定标题

public void BindBiaoti()

{

int ContID =Convert.ToInt32( Request.QueryString["id"]); SqlConnection conn = DB.CreateConnection();

string sqlstr = "select top 1 a.*,b.* from tb_Content as a join tb_Posts as b on a.PostsId=b.PostsId where ContId="+ContID +""; conn.Open();

SqlCommand com = new SqlCommand(sqlstr,conn );

SqlDataReader dr = com.ExecuteReader();

dr.Read();

if (dr.HasRows)

{

this.LinkButton1.Text = dr["PostsName"].ToString(); this.Label1.Text = dr["Subject"].ToString();

Session["PostsId"] = dr["PostsId"].ToString();

}

else

{

//this.LinkButton1.Text ="链接错误";

this.LinkButton1.Visible = false;

this.Label1.Text = "对不起,没有帖子可言!!!";

this.Label33.Visible = false;

}

dr.Close();

conn.Close();

<

Copyright @ 2012-2024华乐美文网 All Rights Reserved. 版权所有