第4章 信息发布后台管理.docx
《第4章 信息发布后台管理.docx》由会员分享,可在线阅读,更多相关《第4章 信息发布后台管理.docx(45页珍藏版)》请在冰豆网上搜索。
![第4章 信息发布后台管理.docx](https://file1.bdocx.com/fileroot1/2022-11/25/7388c3ed-0611-4cd8-8f42-b179be00dc52/7388c3ed-0611-4cd8-8f42-b179be00dc521.gif)
第4章信息发布后台管理
第4章信息管理子系统
4.1系统概述
4.1.1系统需求分析
信息发布管理系统是服务于网站前台信息发布模块的,以网站管理员身份对网站发布数据信息进行添加、删除和修改操作,共享网站发布模块的数据库,数据信息保持同步,即发布的信息是什么,后台信息管理处理的数据就是什么,即第3章中主要显示的数据源是新闻和产品信息,信息发布网站前台与后台管理系统关系如图4-1所示。
图4-1信息发布网站前台与后台管理系统关系
4.1.2系统设计
根据操作不同,将信息的管理分为数据的添加、修改和删除,又因为新闻数据的管理是纯文字管理,而产品的管理包含文字信息和图片信息,所以我们将信息管理分为以下几个模块,所有模块都通过管理桌面进入,系统设计框架如图4-2所示。
图4-2信息管理子系统设计框架
信息管理子系统设计注重功能的实现,对界面的设计只要求操作方便,信息直观。
4.1.3文件规划
我们仍在第3章网站文件系统的基础上添加相应的窗体文件实现图4-2的功能。
页面文件命名目录说明如下表4-1所示。
表4-1信息管理子系统文件目录
窗体文件
说明
newsQuery.aspx
新闻列表查询,可在查询列表中同时实现删除的功能
newsAdd.aspx
新闻添加
newsUpdate.aspx
新闻修改
productQuery.aspx
产品列表查询,可在查询列表中同时实现删除的功能
productAdd.aspx
产品添加
productUpdate.aspx
产品修改
desktop.aspx
管理桌面,集成和引导管理系统的各项功能
因为文件数量的增加,为了管理方便,我们在根目录下添加一个子文件夹,将第四章的所有文件放在该子文件夹下。
操作步骤如下:
步骤一:
在VisualStudio.Net中打开第三章已完成的myWeb文件系统网站,选择“打开|网站”,找到名称为“myWeb”文件夹。
打开。
步骤二:
在解决方案资源管理器中,选择根,点击右键,选择弹出菜单中的新建文件夹,新建“Admin”文件夹。
步骤三:
选择“Admin”文件夹,点击右键,选择弹出菜单中的添加新项,新建表4-1中的窗体文件。
如图4-3所示。
图4-3完整的文件列表
4.2基础知识
4.2.1SQL写操作语法
4.2.1.1Insert语法
INSERT语句可给表添加一个或多个新行。
INSERT语句语法结构如下:
INSERTINTO表名(字段列表)VALUES(数值列表)
此语句将使数值列表作为一行新值插入指定的表中。
字段列表由逗号分隔,用来指定为其提供数据的列。
如果没有指定字段列表,则表中所有字段都将接收数据。
VALUES关键字为表的某一行指定值。
值被指定为逗号分隔的标量表达式列表,表达式的数据类型、精度和小数位数必须与字段列表对应的字段一致,或者可以隐性地转换为字段列表中的对应字段。
如果没有指定字段的列表,指定值的顺序必须与表或视图中的字段顺序一致。
例如,下面的语句用VALUES子句将一个新的产品类型插入到tb_type表中:
INSERTINTOtb_type(fld_id,fld_name)
VALUES(1,”鲜花”)
如果字段列表没有为表或视图中的所有字段命名,将在列表中没有命名的任何字段中插入一个NULL值(或者在默认情况下为这些字段定义的默认值)。
在字段列表中没有指定的所有字段都必须允许null值或者指定的默认值。
注意:
由于Access为自动编号类型的字段生成值,INSERT语句将不为其指定值:
例如:
新闻表中新闻标题(fld_id)是自动编号类型,则在Insert语句的字段列表中不能出现fld_id。
INSERTINTOtb_news(fld_title,fld_content,fld_time,fld_author)
VALUES(“放假新规定”,“2008年起年假调整为20天”,#2007-12-25#,”总经理”)
4.2.1.1Update语法
UPDATE语句用于改变表中所选行的字段值。
Update语句语法结构如下:
UPDATE<表名>
SET<字段>=[新值][,<字段>=[新值]]。
。
。
WHERE<条件表达式>
每个UPDATE的赋值的等号左边为字段名而右边为任意表达式。
表达式可以使用其它字段的值。
所有的表达式将在赋值之前求出结果。
可以使用WHERE子句限定需要改变的行。
A.使用简单的UPDATE
下列示例说明如果从UPDATE语句中去除WHERE子句,所有的行会受到什么影响。
例如:
UPDATEtb_product
SETfld_price=200
本示例将所有产品的价格变为200元。
也可以在更新中使用计算值。
本示例将表产品表中的所有产品价格加倍。
UPDATEtb_product
SETfld_price=fld_price*2
B.把WHERE子句和UPDATE语句一起使用
WHERE子句指定要更新的行。
例如,在下面的例子中,修改编号为001产品的名称、图片和价格。
UPDATEtb_product
SETfld_name='玫瑰',fld_photo='200811.jpg',fld_price=80
WHEREfld_id=‘001’
4.2.1.2Delete语法
从表中删除行。
Update语句语法结构如下:
DELETEFROM<表名>
WHERE<条件表达式>
在执行Delete语句前,请谨慎查看Where后的条件表达式是否符合要求。
A.不带参数使用DELETE
下例从tb_product表中删除所有行。
DELETEFROMtb_product
B.在行集上使用DELETE
下例删除产品表中编号为001的产品记录行。
DELETEFROMtb_product
WHEREfld_id='001'
4.2.2服务器控件
4.2.1.1数据源控件
在第3章中,我们学习了如何从数据库中读取数据并将其在页面上显示出来。
本章讨论相反的过程,怎样从用户那里获得数据并将其写入数据库。
当提到writing写入数据时,我们表示三类操作:
创建新的记录,修改已存在的记录和删除记录,三类操作的模式本质是一样的。
对于关系型数据库,根据数据库类型不同,数据源主要有SqlDataSource和AccessDataSource,能操作读写操作的数据绑定控件多种多样,最常见是GridView、DetailView和FormView,数据源控件和数据绑定控件都在它们内建的代码中实现了自动输入的读写功能。
ASP.NET2.0为控件的属性使用了一些行业标准语言。
修改已存在的记录称作UPDATE,创建新记录称作INSERT或INSERTINTO。
DELETE表示从数据库中删除整条记录。
在数据源控件中的属性中以insert、Update和Delete打头的属性支持数据写操作(增加、修改和删除),具体属性如表4-2所示:
表4-2数据源控件写操作通用属性
属性名称
说明
InsertQuery
连接到XML数据源
InsertCommandType
UpdateQuery
连接到XML数据源
UpdateCommandType
DeleteQuery
连接到XML数据源
DeleteCommandType
INSERT、UPDATE以及DELETE语句有两种编写方法,一种是手工编写SQL语句,可以通过属性窗口或控件的声明标记代码来进行指定。
另一种是自动编写,通过“配置数据源”向导的“指定一个表或视图中的列”页上提供了一个用于自动生成INSERT、UPDATE以及DELETE语句的选项。
以AccessDataSource控件的Delete操作为例,讲解相关属性的设置步骤。
(一)手工配置SQL语句
步骤一:
选择一个AccessDataSource,然后打开属性窗口(在“视图”菜单中选择“属性窗口”,或直接按F4)。
选择InsertQuery属性。
打开“命令和参数编辑器”对话框(图4-4)。
DELETE命令、INSERT命令、SELECT命令或UPDATE命令显示当前命令。
显示的命令类型取决于在“属性”窗口中所选的属性。
图4-4命令和参数编辑器对话框
步骤二:
在“Insert命令”输入框中填上如下代码(你可以手工填写,也可以使用查询生成器),代码如下。
Insertintotb_news(fld_title,fld_content,fld_time,fld_author)
Values(@fld_title,@fld_content,@fld_time,@fld_author)
引用参数时将@符号放在参数名称的前面,@符号代表后面的参数是程序中定义的变量。
步骤三:
点击“刷新参数”按钮以将参数添加到下面的参数列表中。
“参数源”类型,如下表4-3所示。
源
参数属性
None
值
Control
控件ID,Control属性的值(如SelectedValue或SelectedIndex)
Cookie
Cookie名称
Form
窗体字段,即窗体中控件ID
Profile
配置文件参数的值
QueryString
URL中参数
Session
会话字段
在“命令和参数编辑器”对话框中输入了与增加相关的信息之后,点击“确定”,并去到源视图中看看现在的声明标记代码:
AccessDataSourceID="AccessDataSource1"runat="server"
InsertCommand="Insertintotb_news(fld_title,fld_content,fld_time,fld_author)Values(@fld_title,@fld_content,@fld_time,@fld_author)">
ParameterName="fld_title"/>
ParameterName="fld_content"/>
ParameterName="fld_time"/>
ParameterName="fld_author"/>
AccessDataSource>
(二)自动生成SQL语句
在数据源配置的向导过程中“配置Select语句”时,点击“高级”按钮并勾上“生成INSERT、UPDATE以及DELETE语句”复选框(图4-5), 这样根据选好的表和列自动生成INSERT、UPDATE以及DELETE语句,
图4-5选择“GenerateINSERT,UPDATE,andDELETEstatements”
只有当被选择的表含有主键且主键列包含在需要返回的列中时,“生成INSERT、UPDATE以及DELETE语句”复选框才会变为可选状态。
在“生成INSERT、UPDATE以及DELETE语句”复选框被选中之后,“Useoptimisticconcurrency”复选框也会变为可选状态,它将会给最终的UPDATE和DELETE语句添加一个WHERE子句以提供相关控制。
完成了这个向导之后,这个智能标签中的“允许插入”、“允许编辑”以及“允许删除”的选项现在已经是可用的了。
这是因为AccessDataSource的InsertCommand、UpdateCommand以及DeleteCommand都含有了相应的SQL语句。
其声明标记代码如下所示:
AccessDataSourceID="AccessDataSource1"runat="server"
InsertCommand="INSERTINTO[tb_news]([fld_id],[fld_title],[fld_content],
[fld_time],[fld_author])VALUES(?
?
?
?
?
)"
DataFile="~/App_Data/mydb.mdb"
DeleteCommand="DELETEFROM[tb_news]WHERE[fld_id]=?
"
SelectCommand="SELECT*FROM[tb_news]"UpdateCommand="
UPDATE[tb_news]SET[fld_title]=?
[fld_content]=?
[fld_time]=?
[fld_author]=?
WHERE[fld_id]=?
">
ParameterName="fld_id"Type="Int32"/>
ParameterName="fld_title"Type="String"/>
ParameterName="fld_content"Type="String"/>
ParameterName="fld_time"Type="DateTime"/>
ParameterName="fld_author"Type="String"/>
ParameterName="fld_id"Type="Int32"/>
ParameterName="fld_title"Type="String"/>
ParameterName="fld_content"Type="String"/>
ParameterName="fld_time"Type="DateTime"/>
ParameterName="fld_author"Type="String"/>
ParameterName="fld_id"Type="Int32"/>
AccessDataSource>
4.2.1.2数据绑定控件
支持写入数据的最佳数据绑定控件:
GridView、DetailsView和FormView。
但是,GridView只能更新已在有记录的数据,不能创建新的记录。
从功能上来说呈现单列数据时DetailsView和FormView相对应,但DetailsView布局固定,FormView需要自定义布局。
当数据绑定控件与数据源控件(如SqlDataSource控件)结合使用时,数据绑定控件可以利用数据源控件的功能并提供自动删除、更新和插入功能。
例如在GridView中点击了删除按钮之后将调用被绑定数据源控件中的Delete()方法,执行数据源控件的DeleteQuery属性中指定的SQL语句。
FormView控件自动绑定到指定的数据源控件,并且可以利用数据源控件的功能执行插入、更新、删除和分页功能。
(一)GridView
在第三章信息发布模块中,GridView主要起到以表格方式显示数据的作用,在本章中,我们要通过GridView直接对数据进行编辑和修改。
注意GridView不支持增加操作。
在默认情况下,GridView控件的列会以只读模式进行数据的显示,即列信息的显示是以纯文本的方式表示,若要使用列在编辑状态下可操作,必须使该控件中的列以文本框、复选框或下拉列表框等形式出现,这样我们就可以对数据信息进行修改,或让GridView每行显示一个“删除”按钮,直接对数据源相关数据执行删除操作。
根据操作分类不同(删除、修改),GridView设计的方法也有所差异,但无论是删除,还是编辑修改,都是通过CommandField完成。
CommandField类是一个特殊字段,用以显示执行删除、编辑、插入或选择操作的命令按钮。
例如添加“删除”类型的CommandField列后,代码中做为相应改变,添加了以下代码:
CommandFieldShowDeleteButton=”True”>
(二)DetailView和FormView
通过将AutoGenerateEditButton、AutoGenerateDeleteButton或AutoGenerateInsertButton属性分别设置为true,DetailsView控件可自动添加带有“编辑”、“删除”或“新建”按钮的CommandField行字段。
与“删除”按钮(该按钮立即删除选择的记录)不同,单击“编辑”或“新建”按钮时,DetailsView控件分别进入编辑模式或插入模式。
在编辑模式下,“编辑”按钮会被“更新”和“取消”按钮替换。
适合于字段的数据类型的输入控件(如TextBox或CheckBox控件)与字段的值一起显示以便用户进行修改。
单击“更新”按钮更新数据源中的记录,而单击“取消”按钮则放弃所有更改。
同样,在插入模式下,“新建”按钮会被“插入”和“取消”按钮替换,并显示空的输入控件以便用户为新记录输入值。
也可在ButtonField、CommandField或TemplateField行字段中手动定义更新、删除和插入命令按钮。
只要将按钮的CommandName属性设置为“Edit”、“Update”、“Delete”、“New”、“Insert”或“Cancel”即可实现相应效果。
DetailsView控件的各种数据输入模式定义为DetailsViewMode枚举类型,FormView控件的各种数据输入模式定义为FormViewMode枚举类型,两种枚举类型值列表如表4-4所示。
4-4DetailsViewMode和FormViewMode的枚举值
值
说明
Edit
编辑模式,允许用户更新现有记录的值。
Insert
插入模式,允许用户输入新记录的值。
ReadOnly
显示模式,用户无法修改记录值。
若要确定控件的当前模式,请使用CurrentMode属性。
在执行插入或更新操作后,DetailsView和FormView控件将恢复为由DefaultMode属性指定的模式。
也可以通过设置DefaultMode属性指定一个备用恢复模式。
若要以编程方式更改模式,请使用ChangeMode方法。
无论是DetailsView和FormView控件的输入样式可通过编辑模板来完成,其中插入模式中的项在InsertItemTemplate模板中完成,编辑修改则在EditItemTemplate模板中完成。
模板中控件显示字段的值,用双向数据绑定表达式Bind,既可以使编辑项模板中的输入控件自动显示原始字段值,也可以将编辑项模板和插入项模板中的输入控件绑定到数据源的字段。
4.2.1.3验证控件
设计Web窗体时,如何对用户输入的数据进行有效性验证是开发人员需要解决的一个重要问题。
例如,必填字段是否输入了内容,电子邮件地址格式是否正确,所输入的数据是否在指定的范围内。
ASP.NET提供了一组功能强大的验证控件,可以很方便地在Web窗体上完成数据的有效性验证并为用户显示相关的错误信息。
和其他服务器控件一样,验证控件可以通过拖放直接添加到WebForm页面上,表4-5列出了可以验证的控件及其属性。
表4-5ASP.NET验证控件可以验证的控件及属性
控件
可验证的属性
TextBox
Text
ListBox
SelectedItem.value
DropDownlist
SelectedItem.value
RadioButtonList
SelectedItem.value
表4-6列出了可用ASP.NETWeb验证控件类型及其使用方法
表4-6Web验证控件类型及其使用方法
验证类型
使用的控件
验证说明
必填项
RequiredFieldValidator
确保用户不会跳过某一项
与某值比较
CompareValidator
使用比较运算符(小于、等于、大于等)将用户输入与一
个常量值或另一控件的属性值进行比较
范围检查
RangeValidator
检查用户的输入是否在指定的上下限内。
可以检查数字对、字母字符对和日期对的范围
模式匹配
RegularExpressionValidator
检查项为正则表达式定义的模式是否匹配。
允许检查可预知的字符序列,如身份证号、电子邮件地址、电话号码、邮政编码等中的字符序列
用户定义
CustomValidator
使用自己编写的验证逻辑检查用户输入,允许检查在运行时导出的值
验证汇总
ValidatorSummary
在单个位置概述Web页上所有验证控件的错误信息
使用RequiredFieldValidator控件可以验证用户是否在选择列表控件或其他输入控件中输入了数据值。
RequiredFieldValidator控件的常用属性如表4-7所示。
表4-7RequiredFieldValidator控件的常用属性
属性
说明
ControlToValidate
设置为要验证的SelectionList或TextBox控件的ID,如果验证控件中没有数据值,则RequiredFieldValidator控件将显示其ErrorMessage属性中的字符串
ErrorMessage
表示当检查不合法时,出现的错误提示
Display
错误信息的显示方式:
Static表示控件的错误信息在页面中占有固定的位置,如果没有错误,它的显示类似于Label控件;Dymatic表示控件错误信息出现时才占用页面控件;None表示错误出现时不显示,但是可以在ValidationSummary中显示
Text
如果Display为Static且不出错时,显示该文本
CompareValidator控件能够将用户输入到一个输入控件(如TextBox控件)中的值与输入到另一输入控件的值或某个常数值进行比较。
还可以使用CompareValidator控件确定输入到输入控件中的值是否可以转换为Type属性指定的数据类型。
CompareValidator控件的常用属性如表4-8所示。
表4-8CompareValidator控件的常用属性
属性
说明
ControlToValidate
设置为要验证的的控件ID
ControlToCompare
设置为要比较的控件ID
ValueToCompare
设置要比较的常数值
Operator
设置要执行的比较类型
Type
定义控件输入值的类型,可以是String(字符串型)、Iteger(整型)、Double(浮点型)、Date(日期型)、Currency(货币型),在进行比较前,值被转换为该数据类型。
如果转换失败,就验证不能通过
ErrorMessage
表示当检查不合法时,出现的错误提示
Display
错误信息的显示