ASP.NET 2.0数据教程之一:创建一个数据访问层
[2] ASP.NET 2.0数据教程之一:创建一个数据访问层
[3] ASP.NET 2.0数据教程之一:创建一个数据访问层
[4] ASP.NET 2.0数据教程之一:创建一个数据访问层
[5] ASP.NET 2.0数据教程之一:创建一个数据访问层
[6] ASP.NET 2.0数据教程之一:创建一个数据访问层
[7] ASP.NET 2.0数据教程之一:创建一个数据访问层
[8] ASP.NET 2.0数据教程之一:创建一个数据访问层
[9] ASP.NET 2.0数据教程之一:创建一个数据访问层
[10] ASP.NET 2.0数据教程之一:创建一个数据访问层
[11] ASP.NET 2.0数据教程之一:创建一个数据访问层
[12] ASP.NET 2.0数据教程之一:创建一个数据访问层
[13] ASP.NET 2.0数据教程之一:创建一个数据访问层
系列文章导航:
ASP.NET 2.0数据教程之四:使用ObjectDataSource展现数据
ASP.NET 2.0数据教程之六:编程设置ObjectDataSource的参数值
ASP.NET 2.0数据教程之七:使用DropDownList过滤的主/从报表
ASP.NET 2.0数据教程之八:使用两个DropDownList过滤的主/从报表
ASP.NET 2.0数据教程之十:使用 GridView 和DetailView实现的主/从报表
ASP.NET 2.0数据教程之十一:基于数据的自定义格式化
ASP.NET 2.0数据教程之十二:在GridView控件中使用TemplateField
第五步:完成数据访问层
注意,ProductsTableAdapters
类从Products
表中返回的 是CategoryID
和SupplierID
的值,但并不包括Categories
表 的CategoryName
字段和Suppliers
表的CompanyName
字段,尽管当 我们显示产品信息时,这些很可能是我们想要显示的字段。我们可以扩充TableAdapter的起始方 法GetProducts()
来包含CategoryName
和CompanyName
字段的值, 这方法进而会更新强类型的DataTable来包括这些新的字段。
但这会造成一个问题,因为TableAdapter的插入,更新,删除数据的方法是基于这个起始方法的,幸运的是, 自动生成的插入,更新,删除方法并不会受SELECT
子句中的子查询的影响。如果我们注意把 对Categories
和Suppliers
的查询添加成子查询,而不是用JOIN
语 句的话,我们可以避免重做这些修改数据的方法。在ProductsTableAdapter
中的GetProducts()
方法上按右鼠标,选择“配置”,然后,把SELECT
子句改成:
SQL | |
1 2 3 4 5 6 7 |
SELECT ProductID, ProductName, SupplierID, CategoryID, QuantityPerUnit, UnitPrice, UnitsInStock, UnitsOnOrder, ReorderLevel, Discontinued, (SELECT CategoryName FROM Categories WHERE Categories.CategoryID = Products.CategoryID) as CategoryName, (SELECT CompanyName FROM Suppliers WHERE Suppliers.SupplierID = Products.SupplierID) as SupplierName FROM Products |
图29: 更新GetProducts()
方法的SELECT
语句
在更新GetProducts()
方法使用这个新查询语句之后,对应的DataTable将包含2个新字段,CategoryName
和SupplierName
。
图30: Products
DataTable多了2个新字段
花点时间把GetProductsByCategoryID(categoryID)
方法中的SELECT
子句也更新一下。
如果你使用JOIN
句法更新GetProducts()
中的SELECT
语句的话 ,DataSet设计器不能使用DB直接模式自动生成插入,更新,以及删除数据库记录的方法。你必须手工生成这 些方法,就象本教程早先时候我们对InsertProduct
方法的做法一样。此外,你必须手工提供 InsertCommand
,UpdateCommand
和DeleteCommand
属性值,假如你 想使用批更新模式的话。