ASP.NET 2.0数据教程之六十八:在TableAdapters里使用现有的存储过程

返回“ASP.NET 2.0数据教程目录”

导言:

在前面的文章里我们考察了如何让TableAdapters向导自动的创 建存储过程.而在本文,我们将考察如何让TableAdapter使用现有的存储过程。由 于Northwind数据库现有的存储过程很少,我们也需要考察如何在Visual Studio 环境里手动向数据库添加新的存储过程.

注意:

在第63章 《Wrapping Database Modifications within a Transaction》里我们向 TableAdapter添加了一些方法以支持事务(比如 (BeginTransaction, CommitTransaction等)。我们可以在不修改数据访问层代码的情况下,在一个存 储过程里管理整个事务.在本文,我们还将对事务里执行存储过程的T-SQL commands命令进行考察.

第一步:向Northwind数据库添加存储过程

我们很容易通过Visual Studio向数据库添加存储过程.让我们向 Northwind数据库添加一个新存储过程,它返回Products表里特定CategoryID值的 产品.在服务器资源管理窗口,展开Northwind数据库,就像我们在前面的文章看 到的一样,存储过程文件夹包含了现有的存储过程。要添加新的存储过程的话, 只需要右键单击存储过程文件夹,选“添加新存储过程”项,


图1:右击Stored Procedures文件夹选“Add a New Stored Procedure”

如图1所示,选“Add a New Stored Procedure”项后,将在Visual Studio里打开一个脚本窗口.输入如下的脚 本:

CREATE PROCEDURE dbo.Products_SelectByCategoryID
(
  @CategoryID int
)
AS

SELECT ProductID, ProductName, SupplierID, CategoryID,
    QuantityPerUnit, UnitPrice, UnitsInStock, UnitsOnOrder,
    ReorderLevel, Discontinued
FROM Products
WHERE CategoryID = @CategoryID

当执行该脚本时,将会向数据库添加一个名为 Products_SelectByCategoryID的新存储过程,该存储过程接受一个输入参数 (@CategoryID, 类型为int)并将与CategoryID值匹配的所有产品返回.

执 行该CREATE PROCEDURE脚本,将向数据库添加存储过程,点工具栏的保存按钮或 按Ctrl+S。如此之后,刷新存储过程文件夹以显示最近添加的存储过程,如此一 ilai部分由“CREATE PROCEDURE dbo.Products_SelectProductByCategoryID” 转变为“ALTER PROCEDURE dbo.Products_SelectProductByCategoryID”. CREATE PROCEDURE用于添加新存储过程,而ALTER PROCEDURE用于更新现有的存储过程。 由于脚本开头部分已经转变为ALTER PROCEDURE, 我们可以通过改动输入参数或 SQL statements并点击保存按钮,即可完成对存储过程的更新.图2显示的是保存 Products_SelectByCategoryID存储过程后的画面.


图2:Products_SelectByCategoryID存储过程已经添加到数据库

时间: 2024-12-20 12:47:23

ASP.NET 2.0数据教程之六十八:在TableAdapters里使用现有的存储过程的相关文章

ASP.NET 2.0数据教程之六十七:在TableAdapters里创建新的存储过程

返回"ASP.NET 2.0数据教程目录" 导言: 本教程的Data Access Layer (DAL)使用的是类型化的数据集 (Typed DataSets).就像我们在第一章<Creating aData Access Layer>里探讨 的一样,该类型化的数据集由强类型的DataTable和TableAdapter构成. DataTable描绘的是系统里的逻辑实体而TableAdapter引用相关数据库执行数据访 问,包括对DataTable填充数据.执行返回标量数

ASP.NET 2.0数据教程之六十九:在TableAdapter里使用JOINs

返回"ASP.NET 2.0数据教程目录" 导言: 在关系数据库里,我们处理的数据通常跨越了几个数据表.举 例:当展示产品信息时我们很可能想列出每个产品相应的category以及供应商的 名称等.诚然,Products表里包含有CategoryID 和SupplierID值,但是事实上的 category以及supplier names分别定义在Categories表和Suppliers表里. 要从其 它的相关表里获取信息,我们可以使用correlated subqueries或JOI

ASP.NET 2.0数据教程之六十二:创建一个用户自定义的Database-Driven Site Map

返回"ASP.NET 2.0数据教程目录" ASP.NET 2.0数据教程之六十二:创建一个用户自定义的Database-Driven Site Map Provider 导言: ASP.NET 2.0的网站地图(site map)功能允许页面开发者在一些 持久介质(persistent medium),比如一个XML文件里,自己定义一个web程序的 site map.一旦定义了之后,我们可以通过System.Web命名空间的SiteMap class 类或某个Web导航控件,比如Si

ASP.NET 2.0数据教程之六十六:批添加数据

返回"ASP.NET 2.0数据教程目录" 导言: 在前面的第64章<Batch Updating>里,我们用GridView控件 里定制了一个批编辑界面,同样的我们也可以定制一个批添加界面.假设有这种情 况,我们接受一批从Tokyo(东京)发过来的货物:6种不同的tea 和 coffee,如果 用户在一个DetailsView控件里一次输入一个产品,他将会重复的输入很多相同的 值,比如相同的种类(Beverages),相同的供应商(Tokyo Traders),相同的 d

ASP.NET 2.0数据教程之六十五:批删除数据

返回"ASP.NET 2.0数据教程目录" 导言: 在前面的教程,我们用GridView创建了一个批编辑界面.在用户需 要一次性编辑多条记录的情况下,批编辑界面很有用.同理,当用户需要同时删 除多条记录时,该技术也很有用. 如果你使用过邮件系统的话,你应该对 这种最常见的批删除界面很熟悉:界面里每一行都包含一个checkbox,此外,还 有一个"Delete All Checked Items"按钮(如图1).本教程比较短, 因为我们在前面的教程已经完成大体的框架,

ASP.NET 2.0数据教程之六十四:批更新数据

返回"ASP.NET 2.0数据教程目录" 导言: 在前面的教程,我们对数据访问层进行扩展以支持数据库事务. 数据库事务确保一系列的操作要么都成功,要么都失败.本文我们将注意力转到 创建一个批更新数据界面. 在本文,我们将创建一个GridView控件,里面 的每一行记录都可以进行编辑(见图1),因此我们没有必要多添加一列来包含 Edit, Update,和Cancel按钮,而是在页面包含2个"Update Products"按钮,被点击时,遍历所有的产品并对数据库进

ASP.NET 2.0数据教程之六十:在程序启动阶段缓存数据

返回"ASP.NET 2.0数据教程目录" 导言: 前面2章考察了在表现层和缓存层缓存数据.在第58章,我们探 讨了在表现层设置ObjectDataSource的相关cache属性来缓存数据.在第59章,我 们探讨了创建一个单独的分开的缓存层.这2章都是采用"应激装载" (reactive loading)的模式来缓存数据.该模式下,每次请求数据时,系统先 检查其是否在内存,如果没有,则从数据源--比如数据库,来获取 数据,然后将其存储在内存里.该模式的优势在于执行

ASP.NET 2.0数据教程之四十八:在SqlDataSource中使用参数化查询

返回"ASP.NET 2.0数据教程目录" 导言 在前一节教程中,我们看到了如何使用SqlDataSource控件直接从 数据库中获取数据.通过"配置数据源"向导,我们选择一个特定的 数据库,然后就可以:从一个表或视图中选择一些列:输入一个自定义SQL语句: 使用一个存储过程.不管你是手工输入SQL语句还是在向导页中选择一堆列,反正 最终都是给SqlDataSource控件的SelectCommand属性赋上一个SELECT语句,在 SqlDataSource的Se

ASP.NET 2.0数据教程之六十三:在事务里对数据库修改进行封装

返回"ASP.NET 2.0数据教程目录" 导言: 正如我们在第16章<概述添加.更新.删除数据>里探讨的那 样,GridView控件内建的功能支持对每行数据的编辑和删除功能,你只需要稍稍 动一下鼠标就可以创建丰富的数据修改界面而不用写一行代码.但是,在某些情况 下,这还不够,我们需要让用户能够成批地处理数据. 比如,很多基于 web(web-based)的电子邮件客户端,将所有邮件出来,每条邮件除了包含邮件信 息(主题.发送者等)外,还包含一个checkbox控件.这些界