在ASP.NET 2.0中操作数据之六十六:在TableAdapters中使用现有的
该BLL层方法仅仅通过ProductsTableAdapter的 GetProductsByCategoryID()方法来返回ProductsDataTable。由于使用了DataObjectMethodAttribute属性,我们使用ObjectDataSource的设置数据源向导时,该方法会出现在SELECT标签的下拉列表中. 第四步:展示产品 为测试新添加的Products_SelectByCategoryID存储过程,以及DAL 和 BLL层里的对应的方法, 我们将创建一个ASP.NET页面,该页面包含一个DropDownList控件以及一个 GridView控件.DropDownList控件列出数据库里所有的category,当选定某个category时,我们将在GridView里将属于该category的所有product展示出来. 注意:我们在前面的文章里用DropDownList控件创建过主/从报表,更多细节请参考第7章《使用DropDownList过滤的主/从报表》 打开AdvancedDAL文件夹里的ExistingSprocs.aspx页面,从工具箱里拖一个DropDownList控件到页面,设置其ID为Categories,AutoPostBack属性为true.接下来,在其智能标签里将其绑定到一个名为CategoriesDataSource的ObjectDataSource控件.设置该控件调用CategoriesBLL class类的GetCategories方法,而在UPDATE, INSERT, 以及DELETE标签里选“(None)”.
完成ObjectDataSource向导后,我们设置DropDownList控件显示的是CategoryName列,而传递的Value值为CategoryID列.此时,DropDownList控件和ObjectDataSource控件的声明代码看起来和下面的差不多: <asp:DropDownList ID="Categories" runat="server" AutoPostBack="True" DataSourceID="CategoriesDataSource" DataTextField="CategoryName" DataValueField="CategoryID"> </asp:DropDownList> <asp:ObjectDataSource ID="CategoriesDataSource" runat="server" OldValuesParameterFormatString="original_{0}" SelectMethod="GetCategories" TypeName="CategoriesBLL"> </asp:ObjectDataSource> 接下来,在DropDownList控件下面放一个GridView控件,社其ID为ProductsByCategory ,并将其绑定到一个名为ProductsByCategoryDataSource的ObjectDataSource控件,该控件调用ProductsBLLWithSprocs class类的GetProductsByCategoryID(categoryID)方法。由于该GridView控件仅仅用来展示数据,因此,在UPDATE, INSERT, 和DELETE标签里选“(None)”并点Next.
接下来要选择参数来源,我们在Parameter source下拉列表里选“Control”;在ControlID下拉列表里选“Categories” 。点Finish完成设置.
完成ObjectDataSource向导后,Visual Studio会自动的添加BoundFields列和一个 CheckBoxField列。你可以对其外观尽情定制. 在浏览器里登录该页面,当登录时选取的是Beverages(饮料类),该类的产品将会显示出来.如果我们选择其它种类的话,对应的所有产品将显示出来.如下图:
第五步:用事务封装存储过程命令 在第61章《在事务里对数据库修改进行封装》里我们探讨了用事务对数据库修改命令进行封装的技术,这些修改操作要么都成功要么都失败。使用事务的技术包括: .使用System.Transactions命名空间里的类 在63章我们在DAL层使用ADO.NET classe类,而在本文剩余部分,我们将在一个存储过程里运用T-SQL command命令来对一个事务进行管理. 用来手动启动、提交、回滚事务的3个主要SQL command命令分别是BEGIN TRANSACTION, COMMIT TRANSACTION, 以及ROLLBACK TRANSACTION.与使用ADO.NET方法类似,在一个存储过程里使用事务时,应采用如下的模式: 1.指出事务已经开启 可以用T-SQL syntax来执行该模式,如下: BEGIN TRY BEGIN TRANSACTION -- Start the transaction ... Perform the SQL statements that makeup the transaction ... -- If we reach here, success! COMMIT TRANSACTION END TRY BEGIN CATCH -- Whoops, there was an error ROLLBACK TRANSACTION -- Raise an error with the -- details of the exception DECLARE @ErrMsg nvarchar(4000), @ErrSeverity int SELECT @ErrMsg = ERROR_MESSAGE(), @ErrSeverity = ERROR_SEVERITY() RAISERROR(@ErrMsg, @ErrSeverity, 1) END CATCH 代码开始为一个TRY...CATCH模式——SQL Server2005新增的结构.就像C#里的try...catch模式一样,该SQL TRY...CATCH模式在TRY区域执行statement,如果任何一个statement出错,则立即转到CATCH区域. (编辑:PHP编程网 - 黄冈站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |