您的位置:首页 > 编程语言 > ASP

[翻译]Accessing and Updating Data in ASP.NET 2.0: Examining the Data Source Control's Events

2006-12-22 16:11 971 查看
AccessingandUpdatingDatainASP.NET2.0:ExaminingtheDataSourceControl'sEvents

WrittenbyScottMitchell[/b]
Translatedbyjiangyh



简介

ASP.NET2.0数据控件提供了一个简单、直接的方法去访问和修改数据。DataSourceControlBasics是一篇入门级的文章,这篇文章的一系列练习教给了我们如何向一个页面追加数据控件、对指定的数据源进行抽出和/或修改操作和如何绑定数据到一个web控件(例如GridView、DetailsView或FormView)上。用这种点击和选择的方式去设定访问数据的方法非常适合新手和没有经验的程序爱好者,这些向导的方式访问数据对于有经验的程序员来讲却是比较麻烦的,由于这样使程序缺少了扩展和自定义的空间。然而,ASP.NET2.0数据控件却解决了这两方面的问题,依我看,它们不但可以快速而且简单的对数据进行配置和使用,而且通过使用数据控件生命周期中引发的大量事件,在一些特殊的情况下给程序提供了很多的灵活性。

SqlDataSource和SqlDataSource是两个非常通用的数据控件,它们分别提供了一个方法从任何一个数据库或者数据源去取得和修改数据。两个数据控件在selecting、inserting、updating和deleting执行前和提交后的时候都引发了一些事件。例如,SqlDataSource和ObjectDataSource控件在执行查询SQL或者调用取得数据的方法的时候就引发了Selecting事件。在数据取得完成以后又引发了selected事件。通过创建一个Selecting事件句柄,你可以检查或者表示检索的参数;在Selected事件中,可以做一些其他的事情,比如处理在执行操作中出现了异常。类似的updating、inserting和deleting操作前和后引发的事件,和select也是一样的。

非常清楚数据控件事件和事件的生命周期会有很多的好处。现实中很多情况都是在selecting、inserting、updating或者deleting这些执行前事件中分配和改变数据。而且,漂亮的处理数据库和数据源级别的异常,在执行后事件中是非常好的。并且,当调试的时候,执行前事件还可以提供给我们一个机会去检查检索数据用的参数是否正确。让我们开始学习吧。

数据控件事件模式

SqlDataSource和ObjectDataSource控件提供了一些方法去检索,更新,插入和删除数据(Select(),Insert(),Update(),andDelete()).这些方法可以通过程序来调用,但是通常的情况下是自动的被已经绑定好的数据控件调用。当SqlDataSource控件的Select()被调用的时候,他将建立一个指定的连接到数据库,然后执行
SelectCommand
方法,并且返回一个DataView或者DataReader(这个依赖于
DataSourceMode
属性的设定)。当ObjectDataSource控件的Select()方法被调用的时候,他的配置对象将被实例化,并且它指定的方法将会被调用,方法的结果将会从Select()方法返回。

尽管SqlDataSource和ObjectDataSource控件的Select()方法的内部有些不同,但是两个控件都是一样的事件模式。对于
Se
lect()、Insert()、Update()和Delete()这四个方法,SqlDataSource和ObjectDataSource将会引发处理前和处理后事件。一个事件执行比较优先,另一个事件随后执行。通过事件的名字可以判断是在方法执行前出发还是执行后出发。
Selecting事件在取得数据前被引发,然后
Select
方法被执行,最后引发了
Selected方法,下面的图解说明了这个模式。


SELECT
FROMEmployees
WHERESalary>@Salary

SqlDataSource控件的[code]<SelectParameters>
集合包含了一个参数。这个参数的指定方法有很多,可以直接声明,可以写一个不变的值或者从页面上取得一个值,或者是一个查询来的值等等。不管怎么样,你的这个参数的值都可以在
Selecting
事件中被检查或者修改(如果你需要的话)。(请参照
FilteringDatabaseDatawithParameters文章去获得如何使用数据控件参数




对于
SqlDataSource控件,你可以通过
e.Command.Parameters("parameterName")代码去取得或者改变
@Salary
参数的值。




ProtectedSubCategoriesDataSource_Selecting(ByValsenderAsObject,ByValeAsSystem.Web.UI.WebControls.SqlDataSourceSelectingEventArgs)HandlesCategoriesDataSource.Selecting
'Setparametervaluethroughe.Command.Parameters
e.Command.Parameters("@Salary").Value=50000
EndSub



请参照ChangetheValueoftheDataSourceControl'sUpdateandInsertParameters文章去了解更多的关于如何设置数据控件参数的信息。

请通过文章下面的链接去下载例子代码,其中演示了如何通过SqlDataSource控件去取得和修改
CommandText
对象中的所有参数。这对于调试的时候输出信息是非常有用的。




ObjectDataSource控件的执行前事件的练习

和SqlDataSource控件一样,ObjectDataSource的执行前事件也提供了一个机会去自定义要传入执行处理的参数。代替了SqlDataSource的Command对象,ObjectDataSource的执行前事件传递过来的是一个叫做
InputParameters
的dictionary对象,其中也包含了一些参数和值。

例如,就象下面的代码演示的,我们的业务对象调用了
GetEmployeesByDepartmentID(departmentID)方法,其中的整型输入参数将被使用去取得制定部门内的所有员工。使用下面的代码,在
ObjectDataSource对象的
Selecting
事件中设置这些输入参数的值。




ProtectedSubCategoriesDataSource_Selecting(ByValsenderAsObject,ByValeAsSystem.Web.UI.WebControls.ObjectDataSourceSelectingEventArgs)HandlesCategoriesDataSource.Selecting
'Setparametervaluethroughe.InputParameters
e.InputParameters("departmentID").Value=7
EndSub



如果想得到更多的关于给
ObjectDataSource控件设置参数的信息,请参考ProgrammaticallySettingtheObjectDataSource'sParameterValues[VB]文章。



ObjectDataSource和SqlDataSource控件的执行后事件的练习

在指定处理执行完成后,SqlDataSource和ObjectDataSource控件引发了相应的处理后事件(
Selected
Inserted
Updated
或者
Deleted
事件
)。在处理后事件中,能够得到被影响的行数是否有异常出现。ObjectDataSource控件的处理后事件句柄传递了一个值到指定的处理方法中。例如数据库down掉了,输入了非法字符,动作违反了约束条件等异常出现了,或者其他的原因。再者,如果一个异常发生了,E
xceptionHandled
属性被设置成
True
,
表明了异常被截获了。




如果想得到使用
ObjectDataSource的
执行后事件中处理异常的信息,请参照
HandlingBLL-andDAL-LevelExceptionsinanASP.NETPage[VB]文章,如果你使用的是SqlDataSource控件,请参照FredrikNormen的blog中的HandletheDataSourceControlExceptiononYourOwn文章。

结论

当使用SqlDataSource和ObjectDataSource控件取得和修改数据的时候,执行前和后事件被引发。通过为那些事件创建的事件句柄,我们可以在这些事件处理函数中检查下面的工作流程,输出执行使用的参数,或者检查结果。处理前事件一般用作给数据控件初始化要在执行中用到的参数。执行后事件一般用来确定多少的记录被真正的处理了或者来确定是否这个操作引发了异常。在调试的过程中执行前和执行后事件都是非常有用的。

代码下载
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐