快速业务通道

ASP.NET 2.0数据教程之四十八:在SqlDataSource中使用参数化查询

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

返回“ASP.NET 2.0数据教程目录”

导言

在前一节教程中,我们看到了如何使用SqlDataSource控件直接从 数据库中获取数据。通过“配置数据源”向导,我们选择一个特定的 数据库,然后就可以:从一个表或视图中选择一些列;输入一个自定义SQL语句; 使用一个存储过程。不管你是手工输入SQL语句还是在向导页中选择一堆列,反正 最终都是给SqlDataSource控件的SelectCommand属性赋上一个SELECT语句,在 SqlDataSource的Select()方法被调用的时候,执行的也就是这个语句(不管是通 过编程方式调用还是数据Web控件自动调用,都是这样)。

前一节教程中 的示例所使用的SELECT语句缺少WHERE子句。在SELECT语句中,WHERE子句可以用 来限制返回的记录。比如说,我们想显示成本大于50美刀的产品的名字,相应的 查询语句应该是这样的:

1SELECT ProductName
2FROM Products
3WHERE UnitPrice > 50.00

在实际应用中, WHERE子句所使用的值都是取决于某个外部因素的,比如QueryString、Session或 者用户在页面上某个控件中的输入等等。通常,我们通过使用参数来对这些输入 进行指定。在Microsoft SQL Server中,参数都是@parameterName这样的形式, 比如:

1SELECT ProductName
2FROM Products
3WHERE UnitPrice > @Price

对于SELECT、INSERT、UPDATE以及DELETE 语句,SqlDataSource都支持其参数化查询。此外,这些参数不仅可以自动地从各 种各样的源中获取(比如QueryString、Session、页面上的控件等等),还可以 通过编程的方式进行赋值。本教程中,我们将看到如何定义参数化查询,以及如 何通过声明或编程的方式指定参数。

注意:在上一节教程中我们对 ObjectDataSource(前面46节中都是将其作为我们的工具的)与SqlDataSource进 行了比较,并注意到他们在概念上还是蛮相似的。这些相似点也扩展到了参数方 面。ObjectDataSource的参数映射到了业务逻辑层中的方法的输入参数上,而 SqlDataSource的参数则是直接在SQL语句中定义的。它们的Select()、Insert() 、Update()以及Delete()方法都拥有一堆参数,而且这些参数都可以从预定义源 (比如QueryString、Session等等)中获取或通过编程的方式赋值。

创建 一个参数化查询

SqlDataSource控件的“配置数据源”向导提 供了三种用以定义获取数据库记录的Command的方式:

从一个已经存在的表或视图中选择一些列

输入一个自定义SQL语句

选择一个存储过程

如果是从一个已经存在的表或视图中选择一些列,那么WHERE子句的参数 就必须通过“添加WHERE子句”对话框来进行指定。如果是创建一个自 定义SQL语句,你可以直接向WHERE子句中添加参数(记得要使用这样的格式, @parameterName)。存储过程是由一个或多个SQL语句组成的,而且这些语句都是 可以参数化的。SQL语句的参数必须像存储过程的输入参数一样被传进去。

由于创建一个参数化的查询取决于SqlDataSource的SelectCommand是如何 被指定的,所以让我们先来看看所有的这三种方式。首先,打开SqlDataSource文 件夹中的ParameterizedQueries.aspx,从工具箱中拖一个SqlDataSource控件到 设计器中,并将其ID设置为Products25BucksAndUnderDataSource。然后,在它的 智能标签中点击“配置数据源”链接。选择数据库(使用 NORTHWINDConnectionString)并点击“下一步”。

第一步: 在选择表或视图的列时添加一个WHERE子句

在通过SqlDataSource选择数据 库中的哪些列需要返回时,“配置数据源”向导允许我们简单的从表 或视图中选取希望返回的列(见图一)。这样将自动生成一个SELECT语句,当 SqlDataSource的Select()方法被调用时,发送到数据库的就是它了。就像我们在

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号