• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >ASP.NET > 在ASP.NET 2.0中操作数据之六十八:为DataTable添加额外的列

在ASP.NET 2.0中操作数据之六十八:为DataTable添加额外的列

作者:heker2007 字体:[增加 减小] 来源:互联网 时间:2017-05-11

heker2007通过本文主要向大家介绍了asp datatable,asp.net,asp net培训,asp和asp.net的区别,零基础学asp.net等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

导言:

  当向类型化的数据集(Typed DataSet)添加一个TableAdapter时,相应的DataTable的构架已经由TableAdapter的主查询定义好了.比如,如果主查询返回A, B,C这3个域,那么 DataTable将有对应的3个列A, B,和C.除了主查询以外,TableAdapter还可以包含其他的查询,可能是返回基于某些参数的数据。比如,ProductsTableAdapter的主查询返回所有产品的信息,此外,ProductsTableAdapter还包含诸如GetProductsByCategoryID(categoryID) 和 GetProductByProductID(productID)的方法,它们根据指派的参数返回特定的产品信息.

  如果TableAdapter的方法返回的列涵盖在主查询里,工作起来没有问题。但如果返回的列并没有涵盖在主查询,那么我们就需要对DataTable的构架进行扩充.在第35章《使用Repeater和DataList单页面实现主/从报表》里,我们向CategoriesTableAdapter添加方法以返回 CategoryID, CategoryName, Description和NumberOfProducts列。其中前3列是涵盖在主查询里的,而NumberOfProducts列没有在主查询里定义,它返回的是每个category相关产品的数目.我们可以向CategoriesDataTable手工添加一列,以便于统计从新方法返回的NumberOfProducts列的值.

  在第52章《使用FileUpload上传文件》我们探讨过,对使用ad-hoc SQL statements构建且其方法返回的列超出主查询范围的TableAdapters必须多加留意.因为一旦重新运行设置向导的话,它将对TableAdapter的方法进行更新,使其返回的列与主查询相匹配.不过如果使用存储过程的话就不会出现这种情况.

  在本文我们将考察如何扩展DataTable的构架以包含额外的列。我们都知道使用ad-hoc SQL statements构架的TableAdapter不稳定,本文我们将用存储过程来构架.你可以参考第65章《在TableAdapters中创建新的存储过程》和第66章《在TableAdapters中使用现有的存储过程》来获取设置TableAdapter使用存储过程的更多信息.

第一步:向ProductsDataTable添加一个PriceQuartile列

  在第67章里我们创建了一个名为NorthwindWithSprocs的类型化的数据集.该数据集目前包含2个DataTables:ProductsDataTable以及 EmployeesDataTable。其中ProductsTableAdapter包含3个方法:

.GetProducts——主查询,返回Products表的所有记录
.GetProductsByCategoryID(categoryID)——根据指定的categoryID值返回所有产品
.GetProductByProductID(productID)——根据指定的productID值返回所有的产品

  主查询及另外2个方法都返回相同的数据列,也就是Products表的所有列,并没有返回Categories 以及Suppliers表的相关数据.

  在本文,我们将向ProductsTableAdapter添加一个名为GetProductsWithPriceQuartile 的方法,它返回所有的产品.除了标准的数据列外,它还返回PriceQuartile列,它用四分位数来衡量产品价格下跌程度.如果产品价格上升了25%,那么其值为1,如果下降为25%,那么其值为4.在我们创建一个存储过程来返回这种信息之前,我们首先需要更新ProductsDataTable,新添一列来包含GetProductsWithPriceQuartile方法返回的 PriceQuartile值.

  打开NorthwindWithSprocs数据集,在ProductsDataTable上右键单击,选择“ Add” ,再选择“Column”.

http://files.weikejianghu.com/file_images/article/201605/2016051909593832.png
图1:向ProductsDataTable新添一列

  这将向DataTable新添一列,名为“Column1”,类型为System.String.我们需要将该列的名称改为“PriceQuartile”,类型改为System.Int32,因为它的值介于1到4之间.在ProductsDataTable 选中我们新添加的列,在属性窗口里设置其Name属性为 “PriceQuartile”,DataType属性为System.Int32.

http://files.weikejianghu.com/file_images/article/201605/2016051909593833.png
图2:设置该新列的Name 和 DataType属性

  就像图2所示,我们还可以设置其它的属性.比如,是否该列的值必须为unique;如果该列为自增列,其值是否允许为NULL等等.不过我们这里使用其默认值.

第二步:创建GetProductsWithPriceQuartile方法

  现在我们已经对ProductsDataTable进行了更新以包含PriceQuartile列,我们将要创建一个GetProductsWithPriceQuartile方法.在TableAdapter上单击右键,再选择“Add Query”.这将开启TableAdapter查询设置向导,它首先询问我们是使用ad-hoc SQL statements还是使用现有的存储过程或新建一个存储过程.我们选择“Create new stored procedure”,再点Next.

http://files.weikejianghu.com/file_images/article/201605/2016051909593834.png
图3:在TableAdapter向导里创建新的存储过程

  接下来,如图4所示,向导询问我们添加的是那种类型的查询,由于GetProductsWithPriceQuartile方法将返回Products表的所有记录以及所有列,我们选择“SELECT which returns rows”项,再点Next.

http://files.weikejianghu.com/file_images/article/201605/2016051909593835.png
图4:查询将是一个返回多个行的SELECT Statement

接下来,我们在向导里键入如下的查询:

SELECT ProductID, ProductName, SupplierID, CategoryID,
 QuantityPerUnit, UnitPrice, UnitsInStock, UnitsOnOrder,
 ReorderLevel, Discontinued,
 NTILE(4) OVER (ORDER BY UnitPrice DESC) as PriceQuartile
FROM Products
</div>

  上述查询使用了SQL Server 2005新增的NTILE function函数,它将结果划分为4组,将UnitPrice值按降序分组.

  不幸的是,查询构造器(Query Builder)不能解析关键字OVER,并抛出一个错误信息。因此,直接在向导的文本框里键入上述代码,而不要使用查询构造器.

  注意:关于NTILE以及SQL Server 2005的其它函数的更多信息,你可参阅文章《Returning Ranked Results with Microsoft SQL Server 2005》(http://www.4guysfromrolla.com/webtech/010406-1.shtml)以及SQL Server 2005 Books Online的《Ranking Functions section》部分(http://msdn2.microsoft.com/en-us/library/ms189798.aspx)

  完成后,点Next, 向导将要我们为新存储过程重命名,我们取名为Products_SelectWithPriceQuartile再点Next.

http://files.weikejianghu.com/file_images/article/201605/2016051909594036.png
图5:将新存储过程命名为Products_SelectWithPriceQuartile

  最后我们要为TableAdapter的方法命名,选中“Fill a DataTable” 和 “Return a DataTable”两项,并重命名为 FillWithPriceQuartile 和GetProductsWithPriceQuartile.

http://files.weikejianghu.com/file_images/article/201605/2016051909594037.png
图6:对TableAdapter的方法命名并点Finish

  当指定了SELECT查询,并对存储过程和TableAdapter的方法命名后,点Finish完成向导。这时你将看到1到2条警告信息,说“The OVER SQL construct or statement is not supported.” 不必理会它.

  完成向导后,该TableAdapter将会包含FillWithPriceQuartile 和GetProductsWithPriceQuartile方法,并且数据库将包含一个名为Products_SelectWithPriceQuartile的存储过程。花点时间来验证一下,检查数据库,如果你没有看到我们刚添加的存储过程,在存储过程文件夹上右键单击,选“刷新”.

http://files.weikejianghu.com/file_images/article/201605/2016051909594038.png
图7:验证新方法是否添加到TableAdapter

http://files.weikejianghu.com/file_images/article/201605/2016051909594039.png
图8:确保数据

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 在ASP.NET 2.0中操作数据之六十八:为DataTable添加额外的列
  • asp DataTable添加列和行的三种方法

相关文章

  • 2017-05-11Visual Studio 2017设置版权的方法
  • 2017-05-11asp.net编程获取项目根目录实现方法集合
  • 2017-05-11Silverlight融合ajax实现前后台数据交互
  • 2017-05-11浅谈c#设计模式之单一原则
  • 2017-05-11asp.net 编程 实用语句(6条)
  • 2017-05-11MVC HtmlHelper扩展类(PagingHelper)实现分页功能
  • 2017-05-11C#中使用SQLite数据库的方法介绍
  • 2017-05-11vs2012创建的ado.net模型无法实例化的解决方案
  • 2017-05-11ASP.NET GridView 实现课程表显示(动态合并单元格)实现步骤
  • 2017-05-11Asp.net中使用PageDataSource分页实现代码

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • asp.net如何进行mvc异步查询
    • 基于.NET程序默认启动线程数讲解
    • .Net Core配置与自动更新的实现方法
    • 手把手教你在.NET中创建Web服务实现方法
    • asp.net 基于forms验证的目录角色权限的实现
    • Asp.net cookie的处理流程深入分析
    • C# CUR类实现代码
    • IIS和.NET(1.1/2.0)的安装顺序及错误解决方法
    • asp.net关于onpropertychange和oninput事件实现代码
    • ASP.NET.4.5.1+MVC5.0设置系统角色与权限(一)

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有