校园新闻发布管理系统

摘要

ASP.NET是新一代Web应用程序开发平台,它是一个已编译的、基于.NET的开发环境,它提供了生成企业级应用程序所必需的全部服务,基于 .NET Framework 生成,整个框架都可用于任何 ASP.NET 应用程序。可以使用任何与公共语言运行库(CLR)兼容的语言(包括 Visual Basic.NET、C# 和 JScript .NET)来创建应用程序。该系统使用ASP.NET(C#语言)和ADO.NET技术开发, 实现了网站新闻的动态管理,使得对信息的管理更加及时、高效,提高了工作效率,具有一般新闻系统的功能,主要包括前台新闻查看区和后台管理区,可为学校各部门发布新闻,为校园网站提供新闻发布与管理的服务。
关键词 ASP.NET ADO.NET 新闻管理 Browser/Server

.NET to Develop the News Briefing Administrative System of the Campus
Liu Jungang
(Dept. of Computer and Information Science, Southwest Forestry College, Kunming, Yunnan, 650224, China)
Abstract ASP.NET is Web application program developing platform of new generation, it is one that has already compiled , development environment based on .NET, it has offered and produced all essential services of application program of enterprise layer, produce because of .NET Framework, the whole frame can be used in any ASP.NET application program. Can use any to operate the compatible language (including Visual Basic.NET , C# and JScript .NET ) of storehouse (CLR ) to establish application program with common language . This news system uses ASP.NET (C#) and ADO.NET technological development, has realized the dynamic management of website’s news, make the control over information more prompt , more high-efficient , has improved working efficiency. News this system have general news function of system, mainly including front desk news person who look over and back-stage management area, can release news for every department of the school , offer news briefing and management one service for campus website.
Keywords ASP.NET ADO.NET NewsManagement Browser/Server

目 录

引言 1
第一章 研究背景 2
1.1 国内外研究现状及发展趋势 2
1.2 研究目的、意义和范围 3
第二章 课题分析 4
2.1 需求分析 4
2.2 新闻系统的性能需求 5
2.3 运行环境要求 6
2.3.1设备 6
2.3.2支持程序 6
第三章 系统结构流程 6
3.1 新闻系统的模型结构 6
3.2 新闻系统的功能模块简介 7
第四章 使用技术的介绍 9
4.1 .NET Framework概述 9
4.2 ASP.NET、ADO.NET和C#语言简介 10
第五章 新闻系统的主要开发过程 12
5.1 数据库设计 12
5.2各主要窗体页的图形界面介绍 13
5.3 页面的风格设计 15
5.4 系统配置 15
5.4.1 Web.config文件配置 16
5.4.2 配置发布主页 16
5.5 系统部分重要功能及其代码 19
5.5.1 Web用户控件 19
5.5.2 通用类代码 19
5.5.3 添加发布新闻 27
5.5.4 用户注册 29
结束语 31
参考文献 32
致谢…………………………………………………………………………………………………… 33

引言

ASP.NET是微软公司最新推出的一种统一Web开发平台,与最新的数据访问技术ADO.NET一起可构建出强大、安全和可靠的企业级Web应用程序。ASP.NET的语法在很大程度上与ASP兼容,同时它还提供一种新的编程模型和结构,用于生成更安全、可伸缩和稳定的应用程序。
采取了ASP.NET技术的系统在性能上有了很大的改善,主要表现在以下几方面:
● 由于ASP页面每次打开都必须经过先编译后解释的过程,所以页面在反复打开时速度没有任何提升,而ASP.NET页面只需要一次编译后不需要重新编译,直到该页面被修改或Web应用程序重新启动。这使得在多次访问时速度有了极大的提升;
● 由于ASP没有提供任何输出数据为内容的元件,所以在使用ASP撰写数据库页面时只能借助ADO的RecordSet对象逐笔读取记录,而ASP.NET通过ADO.NET提供的DataGrid等数据库元件可以直接和数据库联系;
● ASP.NET支持应用程序的实时更新,管理员不必关掉网络服务器或者甚至不用停止应用程序的运行就可以更新应用文件。应用程序文件永远不会被加锁,因此甚至在程序运行时文件就可以被覆盖,当文件更新后,系统会温和地转换到新的版本;
●ASP.NET采取"CodeBehind(代码分离)技术"方式编写代码使得代码更易于编写,结构更清晰,降低了系统开发与维护的复杂度和费用。

第一章 研究背景

1.1 国内外研究现状及发展趋势
传统的网站新闻管理方式有两种:一种是静态HTML页面,更新信息时需要重新制作页面然后上传页面并修改相应链接,这种方式因为效率太低已不多用;另一种是基于ASP和脚本语言,将动态网页和数据库结合,通过应用程序来处理新闻,这是目前较为流行的做法。但是由于ASP技术本身的局限性使得系统有一些不可克服的缺陷。
ASP.NET不仅仅是下一版本的ASP(Active Server Pages,动态服务器页面),而且是建立动态Web应用程序而重新打造的全新技术,其主要特色包括:
● 语言的独立性;
● 简单的开发操作,分离程序代码和网页内容;
● 提高了执行效率;
● 简化部署与组态的操作;
● 支持客户端类型;
● 支持下一代的Web服务;
● 增进适用性;
● 增进延展性;
● 更多的支持工具;
● 更佳的安全机制;
● 会话(Session)可以跨进程、跨机器。
由于ASP.NET的众多优点,技术发展和各种客观实际的需要,该系统选用了ASP.NET来开发设计,实现了对校园新闻的动态管理操作,使得对新闻信息的发布与管理更加及时、高效,提高了工作效率。
1.2 研究目的、意义和范围
随着Internet的普及,越来越多的企业建立了自己的WWW网站,企业通过网站可以展示产品,发布最新动态信息,与用户进行交流和沟通,与合作伙伴建立联系,以及开展电子商务等。
其中新闻管理系统是构成企业网站的一个重要组成部分,它担负着双层作用:
一方面可以用来动态发布有关新产品或新开发项目;
另一方面又可以及时向顾客公告企业经营业绩、技术与研发进展、特别推荐或优惠的工程项目、产品和服务,从而吸引顾客,扩大顾客群。
该系统使用ASP.NET(C#语言)和ADO.NET技术开发, 实现了网站新闻的动态管理,使得对信息的管理更加及时、高效,提高了工作效率。该新闻系统具有一般新闻系统的功能,主要包括前台新闻查看区和后台管理区,可为学校各部门发布新闻,为校园网站提供新闻发布与管理的服务。
该系统是基于B/S(Browser/Server,浏览器/客户端)模式实现,基于.NET平台架构开发设计,主要实现对校园新闻的发布与管理功能,对新闻内容信息的浏览阅读等。 随着Internet/Intranet技术的兴起,将原本在单机或本地局域网上运行的数据库系统移植到因特网中,即开发基于B/S模式的新一代MIS(Management Information System,管理信息系统)系统,正成为技术发展的趋势。为了保证系统性能的高效性、可扩展性,以及达到数据共享和网络化管理的目的,本系统采用B/S体系结构进行设计开发。

第二章 课题分析

2.1 需求分析
该系统的用户为校园网站,需要经常发布一些新闻,如何能有效地管理和发布新闻呢?最初用户的需求为:“该新闻系统具有一般新闻系统的功能,同时具有新闻审核和不同管理员不同管理权限的功能” 。
通过对其它一些新闻系统的调查发现,一般新闻系统功能如下:
前台按分类显示新闻;
搜索新闻;
后台管理:
● 添加、删除和修改新闻
● 添加、删除和修改用户
● 添加、删除和修改新闻分类
● 添加新闻(添加成功后的新闻根据管理员权限分为可发布新闻和待审核新闻)
需要新闻审核,说明添加后的新闻分为两种:直接发布新闻和待审核新闻,同时待审核的新闻通过管理员或审核员经审核后才可以上传到网站,管理员有不同的权限,需要有个管理权限的功能,在系统中应该有个超级管理员,具有所有权限,能够对系统进行全面管理,同时管理员可以修改自己的一些信息。
根据校园网站新闻发布管理的实际需求,在首页中能显示最热门新闻、头条新闻和最近发布的几条新闻等,同时在后台发布新闻时可以添加图片,也可以添加HTML语法,在前台能自动根据所显示的图片和HTML语法来显示新闻。
在后台管理中,因为有权限的管理员才能登录管理后台,所以需要有个登录验证模块,而且需要根据用户权限的不同显示不同的管理目录,在管理新闻和用户时,当数据少时管理起来还比较方便,如果一多则想找到某条新闻或某个用户就很难,所以需要有个查找(新闻标题、用户)模块用于查找新闻或用户。
根据以上需求分析,该系统要实现的主要功能为:
前台显示新闻部分
● 用户登录区
● 显示最热门的前几条新闻
● 显示推荐的前几条新闻
● 显示最新的前几条新闻
● 搜索新闻功能
● 显示所有新闻分类(即部门)
● 按分类/部门显示其下的所有新闻
● 新闻详细信息浏览阅读
● 图片新闻(自动生成缩略图)以滚动形式在首页显示且只显示前几条
● 网站友情链接(可在管理中添加设置)
● 网站公告可显示发布了新闻但没通过审核的一些相关通知等
后台管理部分
● 登录验证
● 根据权限显示相应的管理目录
● 添加、修改和删除新闻
● 管理发布新闻
● 管理审核新闻
● 分类管理
● 用户管理
● 网站风格设置、系统设置等

2.2 新闻系统的性能需求

该系统在性能功能上应达到如下需求:
操作简单、界面友好: 完全控件式的页面布局,使得新闻的录入工作更简便,许多选项包括新闻分类、来源部门等只需要点击鼠标就可以完成;另外,跟踪出现的提示信息也让用户随时清楚自己的操作情况。对常见网站的新闻管理的各个方面:新闻录入、浏览、删除、修改、搜索等方面都大体实现,实现了网站对即时新闻的管理要求;
即时可见:对新闻的处理(包括录入、修改、删除)将立即在主页的对应栏目显示出来,达到“即时发布、即时见效”的功能;
系统运行应该快速、稳定、高效和可靠;
在结构上应具有很好的可扩展性,便于将来的功能扩展和维护。

2.3 运行环境要求

2.3.1设备
客户机硬件要求:具有 Pentium III 处理器以上且满足以下要求的计算机:最低 64 MB 内存,最小 2.1 GB 硬盘。
服务器硬件要求:具有 Pentium III 处理器以上且满足以下要求的计算机:最低 256MB 内存,最小 8 GB 硬盘。
2.3.2支持程序
客户端
操作系统:Windows 98/NT/2000/XP或更高版本
浏览器:IE 5.0以上或Netscape同等版本以上
服务器
操作系统:Windows 2000 Server或者Windows 2003 Server
Web服务器:MS IIS
应用服务器:IIS、COM+等企业级应用服务器
数据库:ACCESS

第三章 系统结构流程

3.1 新闻系统的模型结构
该系统的模型结构如图3-1所示:

图3-1-1新闻系统的模型结构图示
该系统结构分为三个逻辑层:
Web 层:Web层为客户端浏览器提供对应用程序的访问,这一层是作为解决方案文件中的 Web 项目实现的。Web 层由 ASP.NET Web 窗体和代码隐藏文件组成,Web 窗体只是用 HTML 提供用户操作,而代码隐藏文件实现各种控件的事件处理程序;
业务层:包含各种业务规则和逻辑的实现,业务规则完成如客户帐户的验证和字符串处理这样的任务;
数据访问层:数据访问层为业务层提供数据服务,这一层是作为解决方案文件中的 Conn类(数据访问类,实现公共操作的一个通用类)实现的;

3.2 新闻系统的功能模块简介

图3-2-1列出系统的功能模块图:

图3-2-1 系统功能模块图示
工作流程为:
打开该系统网站,普通浏览者能浏览、阅读和搜索新闻,能进行注册,注册后为新闻输入员,登录进入新闻后台管理区, 只有添加新闻的权限;如登录时为新闻审核员,其不但有添加新闻的权限,还有审核和管理新闻的权限;如为系统管理员,其有新闻后台管理区内的所有权限,除具有新闻审核员所有的权限外,还有添加和管理新闻分类、添加和管理用户、系统、风格和友情链接设置。
在添加新闻时,除常规的添加新闻标题、新闻内容、新闻作者和新闻简介外,还可选择是否为首页新闻、是否为推荐新闻和是否在首页滚动图片(上传图片)等,对新闻内容的字体、字号和字体颜色可以调整,类似Word的一些简单的编辑功能,还可设置超链接和插入表格等。如添加新闻者为新闻输入员,其所添加的新闻需要系统管理员或审核员经审核后才能发布到网上;如是管理员或者审核员添加新闻的话,不需要再经谁审核,直接可以发布到网上。
管理新闻功能包括对任一条新闻内容可作相应修改,也可删除任何一条不再需要保留的新闻。管理新闻分类包括对新闻分类名称作修改,也可将任一分类名删除,删除后其分类下的所有新闻也将被删除。添加用户时,用户等级可为管理员、审核员或者输入员之一,管理用户包括修改用户名、密码和用户等级,也可将任一用户删除。
系统设置包括设置网站标题、网站地址、首页图片、网站公告(可用来显示当前有哪些新闻输入员所添加的新闻没有通过审核,具体的原因理由等)、网站链接(此文本内容可更改)和底部信息(可放置一些与站点相关的文本内容等),对系统设置里的内容,随时可做相应的修改,这权限只有系统管理员才拥有。风格设置指从系统八种风格里任选一种作为当前网站的默认风格。友情链接主要是以图片的形式链接到其它网站,作用跟系统设置里的网站链接功能一样。
(下载源码就到源码网:www.codepub.com)

第四章 使用技术的介绍

4.1 .NET Framework概述
.NET Framework 是用于 .NET 平台的编程模型,其关键组件是公共语言运行库(CLR,Common Language Runtime)和 .NET Framework 类库(包括 ADO.NET、ASP.NET 和 Windows 窗体),它提供了托管执行环境、简化的开发和部署以及与各种编程语言的集成,是支持生成和运行下一代应用程序和 XML Web services 的内部 Windows 组件。
.NET Framework 旨在实现下列目标:
提供一个一致的面向对象的编程环境,而无论对象代码是在本地存储和执行,还是在本地执行但在 Internet 上分布,或者是在远程执行的;
提供一个将软件部署和版本控制冲突最小化的代码执行环境;
提供一个可提高代码(包括由未知的或不完全受信任的第三方创建的代码)执行安全性的代码执行环境;
提供一个可消除脚本环境或解释环境的性能问题的代码执行环境;
使开发人员的经验在面对类型大不相同的应用程序(如基于 Windows 的应用程序和基于 Web 的应用程序)时保持一致;
按照工业标准生成所有通信,以确保基于 .NET Framework 的代码可与任何其他代码集成。
公共语言运行库是 .NET Framework 的基础,可以将运行库看作一个在执行时管理代码的代理,它提供内存管理、线程管理和远程处理等核心服务,并且还强制实施严格的类型安全以及可提高安全性和可靠性的其他形式的代码准确性。事实上,代码管理的概念是运行库的基本原则。以运行库为目标的代码称为托管代码,而不以运行库为目标的代码称为非托管代码。
.NET Framework 类库是一个综合性的面向对象的可重用类型集合,可以使用它开发多种应用程序,这些应用程序包括传统的命令行或图形用户界面 (GUI) 应用程序,也包括基于 ASP.NET 所提供的最新创建的应用程序(如 Web 窗体和 XML Web Services)。

4.2 ASP.NET、ADO.NET和C#语言简介

ASP.NET结构是一个三层系统:UI层、业务逻辑层和数据层,结构模型如图
4-2-1所示:
图4-2-1 ASP.NET的结构模型
● UI层负责与用户交互,接收用户的输入并将服务器端传来的数据呈现给客户;
● 业务逻辑层负责接收浏览器传来的请求并将请求传给数据层,同时将请求处理结果发给浏览器。它由Web表单、XML  Web Services和组件服务组成,其中Web表单是ASP.NET应用程序的核心所在,它是向客户呈现数据和信息的基础,也是响应和处理客户与显示的Web表单交互生成的信息和数据的基础;
● 数据层是通过ADO.NET操纵数据为事务逻辑层提供数据服务,如存储数据操作结果、返回数据检索结果等。
ADO.NET提供对Microsoft SQL Server、OLEDB和XML公开的数据源的一致性访问,数据共享用户应用程序可以使用ADO.NET来连接到这些数据源,并检索、操作和更新数据。
ADO.NET 有两个核心组件:DataSet 和 .NET Framework 数据提供程序,后者是一组包括 Connection、Command、DataReader 和 DataAdapter 4个对象在内的组件,其组件结构如图4-2-2所示:

图4-2-2 ADO.NET的组件结构图示
DataSet对象是 ADO.NET 的断开式结构的核心组件,实现独立于任何数据源的数据访问。Connection 对象提供与数据源的连接,是操作数据库的基础,表示应用程序和数据源之间的惟一会话。Command 对象能够访问用于返回数据、修改数据、运行存储过程以及发送或检索参数信息的数据库命令,实现对数据源的操作,如查询、插入、修改和删除等。DataReader 对象从数据源中读取只进且只读的数据流。DataAdapter 对象是DataSet 对象和数据源之间关联的桥梁,用数据源填充DataSet并解析更新。设计 ADO.NET 组件的目的是为了从“数据操作”中分解出“数据访问”。
C#语言是.NET中一种崭新的语言,C#是由C和C++派生而来的一种“简单、流行、面向对象、类型安全”的程序设计语言,C#意在综合Visual Basic的高效率和C++的强大功能。
第五章 新闻系统的主要开发过程

5.1 数据库设计
该系统使用Access作为应用程序的数据库,建立了有6张数据表:Lb_Admin表用于存储帐户的信息,Lb_Class表用于存储新闻分类信息,Lb_Links表用于存储友情链接信息, Lb_News表用于存储新闻内容, Lb_Setup表用于存储系统设置信息,Lb_Skins表用于存储页面风格。Lb_News表与Lb_Class表相关联。
在6个数据表中,主要介绍一下新闻表和账户表如下:
Lb_News表如表5-1-1所示:

表5-1-1新闻表
n_id为该表主键,n_cid为所属新闻分类ID,n_hit为点击数,n_commend用于判断是否为推荐新闻,n_index用于判断是否为首页新闻,n_title为新闻标题,n_date为发布新闻的日期,n_author为新闻发布者名,n_content为新闻内容,n_ispic用于判断是否为首页滚动图片,n_spic为首页所滚动图片的存储地址,,n_check用于判断是否为审核新闻(值为0表示未通过审核,值1表示通过审核),n_intro为新闻简介,n_publisher为账户类型,如为管理员、审核员或新闻输入员。
Lb_Admin表如表5-2所示:

表5-1-2账户表
A_Id为该表主键,A_Name为用户名,A_Password为密码,A_Grade为用户级别。

5.2各主要窗体页的图形界面介绍

首页:主要功能是显示最热门、最新和推荐的前8条新闻,显示新闻搜索功能、页面风格设置、新闻分类、滚动新闻图片和网站公告等;如图5-2-1所示:

如图5-2-1(下载源码就到源码网:www.codepub.com)
新闻详细内容查看页:在首页里点击新闻标题所进入的页面,显示当前所点击新闻的详细内容,新闻标题正中加粗显示,在添加新闻时,根据所编辑的新闻内容对应显示;如图5-2-2

如图5-2-2
新闻输入员页面:新闻输入员只具有添加新闻的权限,任何浏览者都可注册成为新闻输入员,但所添加的新闻并不能直接发布到网站上显示,而需经过审核员或管理员审核是否给予通过,这保证了网站内容管理的合理性,并不是随便添加的新闻都能发布;如图5-2-3

如图5-2-3
新闻审核员页面:审核员管理页面主要是对新闻进行审核,可对需审核的新闻内容进行查看和编辑,以确定是否授权发布,审核员除审核新闻外,也可添加新闻和管理新闻,所添加的新闻不需审核而可以直接发布,管理新闻包括修改和删除新闻;如图:5-2-4

如图:5-2-4
新闻管理员页面:管理员具有系统的所有权限,除审核员的审核新闻、添加新闻和管理新闻外,还可添加新闻部门和用户。对用户和新闻部门进行管理,包括修改用户ID和密码,删除用户,更改部门名称,删除新闻部门,管理员所添加的新闻也不再需要审核而可以直接发布。如图:5-2-5

如图:5-2-5

5.3 页面的风格设计

为使该系统的页面美观多样,在设计时使用了8种样式风格。为了在页面设计时方便调用,将其存储于数据库的Lb_Skins(风格样式)表中,各窗体通过调用style.css文件来设计界面外观。
CSS是Cascading Style Sheets(层叠样式表单)的简称,简称样式表,它是一种设计网页样式的技术。CSS代码的基本语句结构为:选择符{属性名:属性值},选择符可以是HTML中任何的标签或自定义标识符,比如P、DIV、IMG甚至BODY都可以作为选择符。
CSS在HTML文档中有三种用法:
一种是把CSS文档放到文档中:;
另一种方法是采用<style=“ ”>的格式把样式写在任何html标签中的行内,这种方法比较方便灵活;
还有一种方法是:把编辑好的CSS文档保存成“.CSS”文件,然后在中定义,定义的格式为: …… ,和“rel=stylesheet”指连接的元素是一个样式表文档,“href=‘style.css’”指的是需要连接的文件地址。这种方法非常适宜同时定义多个文档,能使多个文档同时使用相同的样式,从而减少了大量的冗余代码。

5.4 系统配置

5.4.1 Web.config文件配置
ASP.NET应用程序的配置功能放在Web.config文件中,它包含每一个具体Web应用程序的配置信息。在程序运行时,ASP.NET使用分层虚拟目录结构的Web.config文件提供的配置信息为每个惟一的URL资源计算一组配置设置,然后缓存结果配置设置,以供所有页面对资源的请求使用。
Web.config文件对于访问站点的用户来说是不可见的,而且也是不可访问的,它基于XML,每个配置文件都包含XML标记和子标记的嵌套层次结构。
新闻系统的Web.config文件中的配置:
通过键/值对key 和value配置数据库连接的相关信息,将ACCESS数据库lbnews.mdb文件用相对路径的方式设置为字符串"MdbPath"在程序代码中进行连接引用。

5.4.2 配置发布主页

首先要创建虚拟目录,新建虚拟目录的步骤如下:
● 打开IIS(Internet 信息服务),在默认网站上右击,在快捷菜单中选择新建—>虚拟目录;
● 在弹出的虚拟目录创建向导对话框里点击“下一步”;
● 输入虚拟目录别名;
● 选择网站内容所在目录路径;
● 设置“访问”权限。
在所建虚拟目录上右击,在弹出菜单中选择浏览,或在浏览器里输入相应网址,都可运行浏览程序。虚拟目录不在目录列表中显示(也称为 WWW 服务的“目录浏览”),要访问虚拟目录,用户必须知道虚拟目录的别名并在浏览器中键入 URL。对于 WWW 服务,也可以在 HTML 页面中创建链接。发布网站的时候,把程序首页的名字(index.aspx或default.aspx)写在IIS当中就可以访问了。

5.5 系统部分重要功能及其代码

5.5.1 Web用户控件
该系统中创建了两个Web用户控件top.ascx和bottom.ascx,在首页、新闻详细内容查看、新闻分类等页面的HTML代码里都进行了引用,调用方式为:
<%@ Register TagPrefix=“uc1” TagName=“bottom” Src=“bottom.ascx” %>
<%@ Register TagPrefix=“uc1” TagName=“top” Src=“top.ascx” %>
@ Register指令注册用户控件,同时把属性TagName(标签名)和TagPrefix(标签前缀)添加到@ Register指令中,Src属性表示该用户控件相对于父页面的相对地址。用户控件也是服务器端控件,还必须在用户控件代码中添加Runat=server属性,用法如下:
<uc1:top id=“Top1” runat=“server”></uc1:top>
<uc1:bottom id=“Bottom1” runat=“server”></uc1:bottom>
其中top.ascx用户控件作用是显示首页图片、“首页”文本字体、新闻分类、新闻风格和当前日期,bottom.ascx用户控件作用是显示底部相关网站信息等。
用户控件是非常易于代码重用的,可以把许多相关功能和用户界面封装在一个用户控件中,然后在任何需要该功能的地方重用此控件。

5.5.2 通用类代码

在所有相关页面显示文件和Web用户控件的代码隐藏文件.aspx.cs或.ascx.cs中,通过对数据访问类的引用(以创建类实例方式),调用数据访问类里的相应函数完成相关功能,如建立数据库连接、打开和关闭数据库、对数据库执行查询、插入、删除和更新操作、页面登陆检验等。
此处列举Conn类(数据访问类)中主要函数的源码:
public class Conn
{
// 建立数据库连接字符串
public OleDbConnection Lb_Conn=new OleDbConnection(strConn);
public static string strConn //通过创建一个属性来连接数据库
{
get //使用get方法返回此属性的值
{
StringBuilder strResult = new StringBuilder();
strResult.Append(“Provider = Microsoft.Jet.OLEDB.4.0”);
strResult.Append(“; “);
strResult.Append(“Data Source = “);
strResult.Append(HttpContext.Current.Server.MapPath(”.”));
//HttpContext应用程序上下文类,Current属性表示进程中当前请
//求的上下文,MapPath()方法表示返回与Web服务器上的指定虚
//拟路径相对应的物理文件路径,此处作用是创建数据库文件的虚拟路径
strResult.Append(”\”);
strResult.Append(ConfigurationSettings.AppSettings[“MdbPath”]);
//从配置文件中取到数据库连接字符串,“MdbPath”为Web.config
//文件中的键/值对所设置的key值
return strResult.ToString(); //返回字符串类型
}
}
public OleDbDataReader ExecuteOleDbDataReader(string strSql)
{ //此函数表示从数据库读取数据时以只进只读的行流的方式进行
OleDbCommand cmd=new OleDbCommand(strSql,Lb_Conn);
OleDbDataReader rd=cmd.ExecuteReader();
//通过调用对象OleDbCommand的ExecuteReader()方法创建//OleDbDataReader对象
return rd;
}
public DataSet CreateDataSet(string strSql,string tableName)
{
OleDbDataAdapter da=new OleDbDataAdapter(strSql,Lb_Conn);
//创建DataAdapter类实例,可用于填充DataSet对象和检索、更新数据
DataSet dst=new DataSet();
da.Fill(dst,tableName);
//填充DataSet(数据集)中的一个表
return dst;
}
public int ExecuteSql(string strSql)
{
OleDbCommand cmd2=new OleDbCommand(strSql,Lb_Conn);
int result=cmd2.ExecuteNonQuery();
//对数据库执行插入、删除和更新等操作,返回影响数据库记录的行数
return result;
}
}
'数据起始位置:2个CRLF开始
DataStart = InStrB(PosOpenBoundary,FormData,str2bin(VbCrLf & VbCrLf)) + 4
If FormFileName 〈〉 “” Then
'数据长度,减1是因为数据文件的存取字节数问题(可能是AppendChunk方法的问题):
'由于字节数为奇数的图象存到数据库时会去掉最后一个字符导致图象不能正确显示,
'字节数为偶数的数据文件就不会出现这个问题,因此必须保持字节数为偶数。
DataSize = InStrB(DataStart,FormData,DivStr) - DataStart - 1
FormFieldData = MidB(FormData,DataStart,DataSize)
Else
'数据长度,减2是因为分隔标志串前有一个CRLF
DataSize = InStrB(DataStart,FormData,DivStr) - DataStart - 2
FormFieldData = bin2str(MidB(FormData,DataStart,DataSize))
End If

'建立一个Dictionary集存储Form中各个Field的相关数据

Set Field = CreateUploadField()
Field.Name = FormFieldName
Field.FilePath = FormFileName
Field.FileName = GetFileName(FormFileName)
Field.ContentType = FormFileCT
Field.Length = LenB(FormFieldData)
Field.Value = FormFieldData

Fields.Add FormFieldName, Field

PosOpenBoundary = PosCloseBoundary
PosCloseBoundary = InStrB(PosOpenBoundary + 1,FormData,DivStr)
Wend
Set GetUpload = Fields
End Function

'把二进制字符串转换成普通字符串函数

Function bin2str(binstr)
Dim varlen,clow,ccc,skipflag
'中文字符Skip标志
skipflag=0
ccc = “”
If Not IsNull(binstr) Then
varlen=LenB(binstr)
For i=1 To varlen
If skipflag=0 Then
clow = MidB(binstr,i,1)
'判断是否中文的字符
If AscB(clow) 〉 127 Then
'AscW会把二进制的中文双字节字符高位和低位反转,所以要先把中文的高低位反转
ccc =ccc & Chr(AscW(MidB(binstr,i+1,1) & clow))
skipflag=1
Else
ccc = ccc & Chr(AscB(clow))
End If
Else
skipflag=0
End If
Next
End If
bin2str = ccc
End Function

'把普通字符串转成二进制字符串函数

Function str2bin(varstr)
str2bin=“”
For i=1 To Len(varstr)
varchar=mid(varstr,i,1)
varasc = Asc(varchar)
’ asc对中文字符求出来的值可能为负数,
’ 加上65536就可求出它的无符号数值
’ -1在机器内是用补码表示的0xffff,
’ 其无符号值为65535,65535=-1+65536
’ 其他负数依次类推。
If varasc〈0 Then
varasc = varasc + 65535
End If
'对中文的处理:把双字节低位和高位分开
If varasc〉255 Then
varlow = Left(Hex(Asc(varchar)),2)
varhigh = right(Hex(Asc(varchar)),2)
str2bin = str2bin & chrB(“&H” & varlow) & chrB(“&H” & varhigh)
Else
str2bin = str2bin & chrB(AscB(varchar))
End If
Next
End Function

'取得文件名(去掉Path)

Function GetFileName(FullPath)
If FullPath 〈〉 “” Then
FullPath = StrReverse(FullPath)
FullPath = Left(FullPath, InStr(1, FullPath, “”) - 1)
GetFileName = StrReverse(FullPath)
Else
GetFileName = “”
End If
End Function
〈/SCRIPT〉
〈SCRIPT RUNAT=SERVER LANGUAGE=JSCRIPT〉
function CreateUploadField(){ return new uf_Init() }
function uf_Init(){
this.Name = null
this.FileName = null
this.FilePath = null
this.ContentType = null
this.Value = null
this.Length = null
}
〈/SCRIPT〉

//新闻添加

〈!–#include file=“news_session.asp”–〉
〈html〉
〈head〉

〈meta http-equiv=“Content-Language” content=“zh-cn”〉
〈meta http-equiv=“Content-Type” content=“text/html; charset=gb2312”〉
〈style type=“text/css”〉
.buttonface {
BACKGROUND-COLOR: #0079F2; BORDER-BOTTOM: #333333 1px outset; BORDER-LEFT: #333333 1px outset; BORDER-RIGHT: #ffffff 1px outset; BORDER-TOP: #ffffff 1px outset; COLOR: #ffffff; FONT-SIZE: 9pta { color: #000000; text-decoration: none}
〈/style〉
〈SCRIPT ID=clientEventHandlersJS LANGUAGE=javascript〉
〈!–

function client_onblur(ii) {
server=eval(“form1.server”+ii)
if(server.value==“”){
client=eval(“form1.client”+ii)
clientvalue=client.value+“”
varlen=clientvalue.length
a=clientvalue.lastIndexOf(‘\’)
clientvalue=clientvalue.substring(a+1)
//alert(clientvalue);
server.value=clientvalue
}
}
function form1_onsubmit() {
for(i=1;i〈1;i++){
client=eval(“form1.client”+i)
server=eval(“form1.server”+i)
if(client.value!=“” && server.value==“”){alert(“上传后的文件名不能空!”);server.focus();return false}
}
}

//–〉
〈/SCRIPT〉
〈title〉新闻发布系统〈/title〉
〈/head〉
〈body bgcolor=#EDF0F5 topmargin=10 marginheight=5 leftmargin=4 marginwidth=0〉

〈form method=“POST” action=“news_input.asp” name=“form1” enctype=“multipart/form-data” LANGUAGE=javascript οnsubmit=“return form1_onsubmit()”〉
〈div align=“left”〉
〈table border=“1” width=“754” height=“404”〉
〈tr align=“center”〉
〈td width=“754” height=“28” colspan=“3” style=“font-size:11pt”〉〈strong〉新闻发布系统后台管理–新闻添加〈/strong〉〈/td〉
〈/tr〉

〈tr〉
〈td width=“121” height=“16” align=“center” style=“font-size:9pt”〉新闻标题〈/td〉
〈td width=“617” height=“16” colspan=“2”〉
〈input type=“text” name=“news_title” size=“87”〉〈/td〉
〈/tr〉
〈tr〉
〈td width=“121” height=“165” align=“center” style=“font-size:9pt”〉新闻内容〈/td〉
〈td width=“617” height=“165” colspan=“2”〉〈textarea rows=“11” name=“news_content” cols=“85”〉〈/textarea〉〈/td〉
〈/tr〉
〈tr〉
〈td width=“121” height=“21” align=“center” style=“font-size:9pt”〉新闻来源〈/td〉
〈td width=“617” height=“21” colspan=“2”〉
〈input type=“text” name=“news_src” size=“87”〉〈/td〉
〈/tr〉
〈tr〉
〈td width=“121” height=“20” align=“center” style=“font-size:9pt” 〉图片上传〈/td〉
〈td width=“617” height=“20” colspan=“2”〉
〈input type=“file” name=“client1” size=“20” readonly LANGUAGE=javascript οnblur=“return client_onblur(1)” 〉
〈span style=“font-size:9pt”〉〈/span〉 〈INPUT type=“hidden” name=“server1”〉 〈input type=“hidden” value=“mysession” name=“mysession”〉 〈/td〉
〈/tr〉
〈/table〉
〈/div〉
〈p〉
〈input type=“submit” value=“递交” name=“B1” class=“buttonface”〉 〈input type=“reset” value=“全部重写” name=“B2” class=“buttonface”〉
〈input type=“button” value=“帐号修改” οnclick=“location.href=‘admin/news_chadmin.asp’” name=“B2” style=“font-size:10pt;color:#000000;” class=“buttonface”〉
〈input type=“button” value=“新闻修改” οnclick=“location.href=‘news_admin1.asp’” name=“B2” style=“font-size:10pt;color:#000000;” class=“buttonface”〉〈/p〉

〈/form〉
〈/body〉
〈/html〉

'###################
news_input.asp
〈!–#include file=“upload.inc”–〉
〈%
'Fields(“xxx”).Name 取得Form中xxx(Form Object)的名字
'Fields(“xxx”).FilePath 如果是file Object 取得文件的完整路径
'Fields(“xxx”).FileName 如果是file Object 取得文件名
'Fields(“xxx”).ContentType 如果是file Object 取得文件的类型
'Fields(“xxx”).Length 取得Form中xxx(Form Object)的数据长度
'Fields(“xxx”).Value 取得Form中xxx(Form Object)的数据内容
Dim FormData,FormSize,gnote,bnote,notes,binlen,binstr
FormSize=Request.TotalBytes
FormData=Request.BinaryRead(FormSize)
Set Fields = GetUpload(FormData)

'############判断输入错误
dim news_title,news_content,news_src,mysession

mysession=Fields(“mysession”).value
if len(mysession)=0 then
Response.Write “非法登陆或超时请重新登陆”
Response.End
end if

news_title=Fields(“news_title”).value
news_title=replace(news_title,“|”,“|”)
news_content=Fields(“news_content”).value
news_src=Fields(“news_src”).value
news_src=replace(news_src,“|”,“|”)
if len(news_title)=0 then%〉
〈script〉
alert(“出错!新闻标题不能为空”);
history.go(-1);
//window.location=“news_add.asp”;
〈/script〉
〈%Response.end
end if

if len(news_content)=0 then%〉
〈script〉
alert(“出错!新闻内容不能为空”);
history.go(-1);
〈/script〉
〈%end if

if len(news_src)=0 then%〉
〈script〉
alert(“出错!新闻来源不能为空”);
history.go(-1);
〈/script〉
〈%Response.end
end if

dim varchar
varchar=right(Fields(“server1”).value,3)
if len(varchar)〈〉0 then
if varchar〈〉“gif” and varchar〈〉“jpg” then
%〉
〈script〉
alert(“出错!不能上传该图片类型”);
history.go(-1);
〈/script〉
〈% Response.end
else
end if
end if

5.5.3 添加发布新闻

添加发布新闻在该系统中显然起着很关键的作用,在添加新闻管理页面里,通过单击“添加”按钮执行新闻的添加,但能不能直接发布,还要根据权限来判断,“添加”按钮的单击事件主要程序如下:
Conn ds1=new Conn(); //调用数据访问类
ds1.DBopen(); //打开数据库
string title=Lb_Title.Value.ToString(); //新闻标题
string Content=LbNewsContent.Value.ToString().Replace(“'”," “); //新闻内容
string Author=Lb_Author.Value.ToString(); //新闻作者
string TitlePic=Lb_TitlePic.Value.ToString(); //是否首页滚动图片
string Intro=LbNews_Intro.Text.ToString().Replace(”\r\n",“
”).Replace(“'”," “);
//新闻简介
string Lb_Grade;//用户级别
int lb_check; //判断新闻是否需要审核,1:不需要审核,0:需要审核
try //捕获异常范围
{
if (Lb_Grade==“1”) //用户级别1为新闻输入员
{
lb_check=0; //需要审核
}
else //审核员或管理员
{
lb_check=1; //不需要审核
}
int result=ds1.ExecuteSql(“insert into Lb_News([n_cid],[n_commend],[n_index],[n_ispic],[n_title],[n_spic],[n_author],[n_content],[n_publisher],[n_intro],[n_check])values(”+Lb_Classid+”,“+Lb_IsCommend+”,“+Lb_IsIndex+”,“+Lb_IsPic+”,‘“+title+”’,‘“+TitlePic+”’,‘“+Author+”’,‘“+Content+”’,‘“+Publisher+”’,‘“+Intro+”’,“+lb_check+”)");
//将所添加的新闻标题、内容、作者和来源部门等插入到数据表Lb_News中
if (result>0) //数据添加到数据库中成功
{
if (Lb_Grade==“1”)
{
ds1.alert(“添加成功,需等待管理员审核”,“admin_articleadd.aspx”);
} //输入员添加新闻的话弹出对话框提示需审核,并重置当前添加页面
else
{
ds1.alert(“添加成功”,“admin_articleadd.aspx”);
} //审核员或管理员添加的话就直接发布到网站上,并重置当前添加页面
}
else //添加不成功
{
Response.Write (“添加新闻失败”);
}
}
catch(System.Data.OleDb.OleDbException ex)
{
Response.Write (ex.ToString());
} //以上操作中如有异常发生则捕捉
finally
{
ds1.DBclose();
}//关闭数据库连接

5.5.4 用户注册

该系统的内容是需要靠校园众多部门众多用户来丰富充实的,而用户注册功能提供了给用户注册和发布新闻的作用。在首页里只需点击注册按钮即可注册,注册页面里注册按钮的单击事件处理程序如下:
Conn ds1=new Conn(); //调用数据访问类
ds1.DBopen();
string name=userName.Text.Trim(); //用户名
string pass=System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(passWord.Text.Trim(), “MD5”) ; //用户密码
//通过HashPasswordForStoringInConfigFile()方法实现MD5加密解密算法
string strSql=“select * from Lb_Admin where A_Name='”+name+“'”;
ds1.DBopen();
OleDbDataReader rd=ds1.ExecuteOleDbDataReader(strSql);
if (rd.Read()==true) //读取DataReader中下一条记录时有相同记录
{
ds1.alert(“已存在此用户名,请用其它”,“reg.aspx”);
rd.Close();
}
else
{
rd.Close();
int result=ds1.ExecuteSql(“insert into Lb_Admin(A_Name,A_Password)values('”+name+“‘,’”+pass+“')”);
if(result>0) //添加数据成功
{
ds1.alert(“注册成功,请登陆”,“index.aspx”);
}
else
{
ds1.alert(“注册失败”,“reg.aspx”);
}
}
ds1.DBclose();
在注册页面中用到了RequiredFieldValidator(非空)、RegularExpressionValidator(正则表达式)和CompareValidator(比较)验证控件,分别用于文本输入框的非空验证、由正则表达式来验证用户的输入值是否正确和验证两个输入框的值是否相等。
服务器端验证控件是ASP.NET控件中新产生的一种验证控件,可以在客户端直接验证用户的输入,但控件必须包含“runat=server”属性。正常情况下验证控件是不可见的,当用户输入数据错误时它们才可见。
(下载源码就到源码网:www.codepub.com)

结束语

为做出该新闻系统程序,访问了大量Web网络开发方面的网站,搜集了大量关于Web网络开发的中英文资料,也查阅了大量书籍的源代码作为参考和运用,从中学会了许多ASP.NET和ADO.NET技术关于Web开发方面的知识。
该系统的功能还有一些没完成和完成得不理想,如文件上载和管理功能没做出,新闻审核功能里没能做到将审核时的意见反馈给新闻发布者,而是通过网站公告的形式来实现。一方面时间紧迫;另一方面是ASP.NET这门技术的学习和熟练使用需要一个长期的过程。
(下载源码就到源码网:www.codepub.com)
参考文献

[1] 天极网新技术研究室.ASP.NET完全入门.人民邮电出版社,2001.6
[2] Sanjeev Rohilla等著,陈君等译.ADO.NET专业项目实例开发.中国水利水电出版社,2003.5
[3] 启明工作室编著.ASP.NET网络应用系统开发与实例.人民邮电出版社,2005.7
[4] 王华杰,李律松 孙一波等编著.C#数据库开发技术.清华大学出版社,2003.2
[5] 攀建编著.ASP.NET+ADO.NET项目开发实例.清华大学出版社,2004.1
[6] (美)A.Russell Jones著,高春蓉等译.ASP.NET从入门到精通.电子工业出版,2002.1
[7] Scott Worley著,王文龙 刘湘宁译.ASP.NET技术内幕.人民邮电出版社,2002.4
[8] Russ Basiura等著,杨浩译.ASP.NET Web 服务高级编程.清华大学出版社, 2003.2
[9] (美)Angshuman Chakraborti等著,唐云深,赵世华等译.NET Framework专业项目实例开发…中国水利水电出版社,2003.6
[10] Scott Allen等著.C#数据库入门.郝启堂 张哲峰译.清华大学出版社,2003.2
[11] (美)微软公司著.NET框架1.1类库参考手册.清华大学出版社,2004.1
[12] Steve Walther著.ASP.NET:Tips,Tutorials,and Code.电子工业出版社,2003.7
[13] (美)Jeffrey Richte著.Microsoft.NET Frameworks.清华大学出版社,2003.4
[14] Alex Homer等.ASP.NET Web Forms Programming.清华大学出版社,2003.1

致谢

在论文撰写过程中,得到廖云鹏老师的悉心指导,在此向他致以诚心的谢意。同时真诚感谢两年来教授我的老师们,是他们使我获得了良好的理论知识和实践技能,为我以后能在社会工作中立足打下了坚实的基础,让我能在面对各种新技术的学习中有个良好的前提和扎实的基础。

猜你喜欢

转载自blog.csdn.net/ambiguous__/article/details/131058397