加入收藏 | 设为首页 | 会员中心 | 我要投稿 温州站长网 (https://www.0577zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

在ASP.NET 2.0中操作数据之六十六:在TableAdapters中使用现有的

发布时间:2016-11-23 22:11:22 所属栏目:MsSql教程 来源:站长网
导读:导言: 在前面的文章里我们考察了如何让TableAdapters向导自动的创建存储过程.而在本文,我们将考察如何让TableAdapter使用现有的存储过程。由于Northwind数据库现有的存储过程很少,我们也需要考察如何在Visual Studio环境里手动向数据库添加新的存储过程

  该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)”.

/uploads/allimg/c161121/14OI95395b30-1221508.png
图7:调用CategoriesBLL Class类的GetCategories方法

/uploads/allimg/c161121/14OI953c0H0-12312C.png
图8:在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.

/uploads/allimg/c161121/14OI954020450-1245421.png
图9:设置ObjectDataSource控件ProductsBLLWithSprocs Class类

/uploads/allimg/c161121/14OI95403a0-1251948.png
图10:调用GetProductsByCategoryID(categoryID)方法

接下来要选择参数来源,我们在Parameter source下拉列表里选“Control”;在ControlID下拉列表里选“Categories” 。点Finish完成设置.

/uploads/allimg/c161121/14OI954062b0-12B361.png
图11:设参数categoryID来源于ID为Categories的DropDownList控件

完成ObjectDataSource向导后,Visual Studio会自动的添加BoundFields列和一个 CheckBoxField列。你可以对其外观尽情定制.

在浏览器里登录该页面,当登录时选取的是Beverages(饮料类),该类的产品将会显示出来.如果我们选择其它种类的话,对应的所有产品将显示出来.如下图: 

/uploads/allimg/c161121/14OI9540ZK0-12O9A.png
图12: Produce类的所有产品都显示出来了

第五步:用事务封装存储过程命令

在第61章《在事务里对数据库修改进行封装》里我们探讨了用事务对数据库修改命令进行封装的技术,这些修改操作要么都成功要么都失败。使用事务的技术包括:

.使用System.Transactions命名空间里的类
.在Data Access Layer层调用ADO.NET classes类,比如SqlTransaction
.直接在存储过程里添加T-SQLtransaction commands事务命令

在63章我们在DAL层使用ADO.NET classe类,而在本文剩余部分,我们将在一个存储过程里运用T-SQL command命令来对一个事务进行管理.

用来手动启动、提交、回滚事务的3个主要SQL command命令分别是BEGIN TRANSACTION, COMMIT TRANSACTION, 以及ROLLBACK TRANSACTION.与使用ADO.NET方法类似,在一个存储过程里使用事务时,应采用如下的模式:

1.指出事务已经开启
2.执行事务包含的SQL statements
3.如果第二步的任何一个statement出错,则回滚事务
4.如果第二步的所有statement执行无误,则提交事务

可以用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区域.

(编辑:温州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读