当前位置: 首页 > web开发 > ASP.NET > 正文

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

时间:2010-08-11 翻译:cnblogs Reeezak

返回“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)并点击“下一步”。