"在ASP.NET 2.0中操作数据之六十六:在TableAdapters中使用现有的存储过程。本文将介绍如何在Visual Studio环境中手动添加存储过程,并配置TableAdapter来使用这些已存在的存储过程,以及如何在事务中执行存储过程的T-SQL命令。"
在ASP.NET 2.0中,TableAdapters是用于与数据库交互的重要组件,通常通过向导自动生成存储过程。然而,有时我们可能需要利用已经存在于数据库中的存储过程。下面将详细介绍如何实现这一目标。
首先,我们需要了解如何在Visual Studio中向数据库添加存储过程。对于Northwind数据库,可以通过以下步骤操作:
1. 在服务器资源管理器中,展开Northwind数据库,找到“存储过程”文件夹。
2. 右键点击该文件夹,选择“添加新存储过程”选项。
3. 这将打开一个新的脚本窗口,然后在此窗口中编写存储过程的SQL语句。
例如,我们可以创建一个名为`dbo.Products_SelectByCategoryID`的存储过程,用于根据CategoryID筛选Products表中的记录。存储过程的定义如下:
```sql
CREATE PROCEDURE dbo.Products_SelectByCategoryID
(
@CategoryID int
)
AS
BEGIN
SELECT ProductID, ProductName, SupplierID, CategoryID,
QuantityPerUnit, UnitPrice, UnitsInStock, UnitsOnOrder,
ReorderLevel, Discontinued
FROM Products
WHERE CategoryID = @CategoryID
END
```
这个存储过程接收一个名为`@CategoryID`的输入参数,然后返回匹配该CategoryID的所有产品信息。
接下来,我们需要配置TableAdapter以使用这个新添加的存储过程:
1. 打开DataSet,找到对应的TableAdapter,右键点击并选择“配置”。
2. 在TableAdapter配置向导中,选择“使用现有存储过程”选项。
3. 搜索并选择刚才创建的`dbo.Products_SelectByCategoryID`存储过程,将其添加到TableAdapter的操作列表中。
4. 完成向导,保存配置。
此外,我们在第61章中讨论了如何在TableAdapter中使用事务。这里,我们可以在存储过程中包含事务处理逻辑,这样在执行存储过程时,所有的数据库操作都会在一个事务内完成,确保数据的一致性。例如,如果需要在存储过程中进行一系列操作,可以使用`BEGIN TRANSACTION`、`COMMIT TRANSACTION`或`ROLLBACK TRANSACTION`来管理事务。
在.NET代码中调用这个存储过程时,可以像这样使用TableAdapter:
```csharp
using (var adapter = new NorthwindDataSetTableAdapters.ProductsTableAdapter())
{
adapter.Connection.Open();
adapter.BeginTransaction();
// 调用存储过程
var products = adapter.Products_SelectByCategoryID(categoryId);
// 进行其他操作,如更新、插入或删除
if (allOk)
{
adapter.CommitTransaction();
}
else
{
adapter.RollbackTransaction();
}
adapter.Connection.Close();
}
```
通过这种方式,我们能够在ASP.NET 2.0的TableAdapter中有效地利用现有的存储过程,同时确保在事务中执行多个操作的正确性和一致性。这不仅提高了代码的可维护性,也使得数据库操作更加灵活和高效。