快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-21
ctsDataTable();

// Create a new ProductsRow instance and set its properties
NorthwindWithSprocs.ProductsRow product = products.NewProductsRow ();
product.ProductName = "New Product";
product.CategoryID = 1; // Beverages
product.Discontinued = false;

// Add the ProductsRow instance to the DataTable
products.AddProductsRow(product);

// Update the DataTable using the Batch Update pattern
productsAPI.Update(products);

// At this point, we can determine the value of the newly-added record''s ProductID
int newlyAddedProductIDValue = product.ProductID;

类似的 ,Products_Update存储过程的UPDATE statement后面也包含一个SELECT statement,如下:

ALTER PROCEDURE dbo.Products_Update
(
  @ProductName nvarchar(40),
  @SupplierID int,
  @CategoryID int,
  @QuantityPerUnit nvarchar(20),
   @UnitPrice money,
  @UnitsInStock smallint,
   @UnitsOnOrder smallint,
  @ReorderLevel smallint,
   @Discontinued bit,
  @Original_ProductID int,
   @ProductID int
)
AS
  SET NOCOUNT OFF;
UPDATE [Products]
SET [ProductName] = @ProductName, [SupplierID] = @SupplierID,
  [CategoryID] = @CategoryID, [QuantityPerUnit] = @QuantityPerUnit,
  [UnitPrice] = @UnitPrice, [UnitsInStock] = @UnitsInStock,
  [UnitsOnOrder] = @UnitsOnOrder, [ReorderLevel] = @ReorderLevel,
  [Discontinued] = @Discontinued
WHERE (([ProductID] = @Original_ProductID));

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

我们注 意到该存储过程有2个关于ProductID的参数,即@Original_ProductID 和 @ProductID,这样以来我们就可以对主键值进行改动了.举个例子:有一个 employee(雇员)数据库,每条employee记录都用雇员的社保号码作为其主键值.要 想更改某条记录的社保号码,必须提供新的号码以及原始号码.不过对Products表 来说用不着,因为列ProductID是一个唯一标识列(IDENTITY column),不应对其 更改.实际上,Products_Update存储过程里的UPDATE statement并没有包含 ProductID列,因此,如果在UPDATE statement的WHERE字句里使用 @Original_ProductID的话,显得多此一举,而应该使用@ProductID参数.当更新 某个存储过程的参数时,TableAdapter里所有那些调用该存储过程方法都应该进 行更新.

第四步:修改存储过程的参数并更新TableAdapter

由于 @Original_ProductID参数是多余的,让我们将其从Products_Update存储过程里 完全清除.打开Products_Update存储过程,删除@Original_ProductID参数,在 UPDATE statement的WHERE字句里将@Original_ProductID改为@ProductID. 完成 上述修改后,该存储过程里的T-SQL看起来应该和下面的差不多:

ALTER PROCEDURE dbo.Products_Update
(
   @ProductName nvarchar(40),
  @SupplierID int,
   @CategoryID int,
  @QuantityPerUnit nvarchar(20),
   @UnitPrice money,
  @UnitsInStock smallint,
   @UnitsOnOrder smallint,
  @ReorderLevel smallint,
   @Discontinued bit,
  @ProductID int
)
AS
  SET NOCOUNT OFF;
UPDATE [Products] SET [ProductName] = @ProductName, [SupplierID] = @SupplierID,
  [CategoryID] = @CategoryID, [QuantityPerUnit] = @QuantityPerUnit,
  [UnitPrice] = @Un

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号