在ASP.NET 2.0中操作数据之六十九:处理Computed Co(2)

  在处理数据访问层前,让我们花点时间查看FullContactName列的值.在服务器资源管理器里,在Suppliers表上右键单击,选择“New Query”,这将启动一个查询窗口提示我们在查询里包含哪个表.添加Suppliers表,再点“Close”.接下来从Suppliers表里选择CompanyName, ContactName, ContactTitle,以及FullContactName列.最后,点击工具栏上的红色感叹号图标执行查询,查看结果.如图2所示,结果里包含了FullContactName列,它以ContactName (ContactTitle, CompanyName)”的格式使用了CompanyName, ContactName,ContactTitle这3列.

/uploads/allimg/200612/1HA95340_0.png


图2:FullContactName列的格式为“ContactName (ContactTitle, CompanyName)”

第三步:在数据访问层添加一个SuppliersTableAdapter

  为了在我们的应用程序里处理supplier信息,我们首先需要在DAL层创建一个TableAdapter 和 DataTable.我们可以用前面的教程探讨的方法来进行创建,稍微不同的是我们将要与computed columns列打交道.

  如果你用ad-hoc SQL statements来构造一个TableAdapter的话,你可以很简单的通过TableAdapter设置向导在TableAdapter的主查询里引用computed column列,这样,在自动生成的INSERT 和 UPDATE statements就会引用computed column列。如果你执行这2个方法的话,将会抛出这样的一个SqlException:“The column ‘ColumnName' cannot be modified because it is either a computed column or is the result of a UNION operator”.虽然我们可以在InsertCommand和UpdateCommand属性里手工改动INSERT 和 UPDATE statement,但是一旦重新运行TableAdapter设置向导后,我们所做的用户定制就会丢失掉.

  由于使用ad-hoc SQL statements的TableAdapters的这种不稳定性,我们倾向于使用存储过程来处理computed columns列.如果你使用的是现有的存储过程的话,你可以参阅第66章《在TableAdapters中使用现有的存储过程》那样来配置TableAdapter.如果你使用TableAdapter设置向导来创建存储过程的话,很重要的一点是最开始,你不要在主查询里引用computed columns列,如果你在主查询里引用了computed columns列的话,你刚完成设置,向导就会提示你不能创建相应的存储过程.简而言之,在设置TableAdapter时,最开始不要在主查询里引用computed column列,接下来再对相应的存储过程和TableAdapter的SelectCommand属性进行更改以引用computed column列.这种方法我们在第67章《在TableAdapters中使用JOINs》里探讨过.

  本文我们将新添加一个TableAdapter并自动创建存储过程.当然我们要在主查询里忽略这个名为FullContactName的computed column列.打开~/App_Code/DAL文件夹里的NorthwindWithSprocs DataSet数据集,在设计器里右键单击,选“add a new TableAdapter”,这将开启TableAdapter设置向导,指定数据库连接信息(也就Web.config文件里的NORTHWNDConnectionString),点Next。选“Create new stored procedures”项,再点Next.

/uploads/allimg/200612/1HF31637_0.png


图3:选择“Create new stored procedures”项

  接下来我们要指定主查询,键入如下的查询,其返回每个supplier的SupplierID, CompanyName, ContactName, ContactTitle列。注意,我们有意忽略了computed column列(即FullContactName列)。不过我们将在第四步更新该存储过程以引用该列:

SELECT SupplierID, CompanyName, ContactName, ContactTitle FROM Suppliers

  输入完主查询后点Next,向导要我们为将要创建的4个存储过程命名,分别命名为Suppliers_Select, Suppliers_Insert, Suppliers_Update,以及 Suppliers_Delete。如图4所示:

/uploads/allimg/200612/1HF0W59_0.png


图4:对自动生成的存储过程命名

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wjwywf.html