48-使用SqlDataSource控件查询数据.docx
文本预览下载声明
导言:? 在上一章里,我们探讨了怎样用SqlDataSource控件直接从数据库检索数据。通过设置数据源向导,我们可以选择要访问的数据库,然后要么从指定的表或视图,要么从自定义的SQL语句或存储过程来返回需要的记录。不管用那种方式,SqlDataSource控件的SelectCommand 属性都被赋值为一个ad-hoc SQL SELECT命令(SELECT statement)。当SqlDataSource控件的Select()方法被调用时(无论数据Web控件是自动还是通过编程设置来调用Select()方法),就将执行这个SELECT命令。? 上一篇教程里使用的SQL SELECT命令里缺少WHERE字句,在SELECT命令里WHERE字句用来限制查询结果范围。比如,我们显示那些价格高于50的产品名称时,可以用如下所示的查询语句:SELECT ProductNameFROM ProductsWHERE UnitPrice 50.00?? 特别的,WHERE字句中的参数值来源于外部(some external source),比如:查询字符串的值,一个session变量,或用户从Web控件输入的值。一般来说,通过使用参数的方式来传递这些值。在Microsoft SQL Server里,我们这样表示参数@parameterName,例如:SELECT ProductNameFROM ProductsWHERE UnitPrice @Price? SqlDataSource控件支持带参数的查询,包括SELECT,INSERT, UPDATE和DELETE 命令而且,参数的值可以来源于一个查询字符串,session状态,页面上的控件等等,甚至可以通过编程来赋值。这一章我们探讨怎样通过显式地赋值和通过编程来赋值2种方式来构造带参数的查询。?注意:?? 在上一章我们将SqlDataSource控件和ObjectDataSource控件作了比较。除了在概念上类似外,它们在参数的使用上也很相像。不过SqlDataSource控件的参数与位于业务逻辑层的相关方法的对应参数相匹配,而ObjectDataSource控件的参数由SQL查询直接定义。此2种控件的Select(),Insert(), Update()和Delete()方法都有对应的参数集,此外这2种控件还可以包含通过编程传入的,或由查询字符串,session变量等预定义源(pre-defined sources)传入的参数值。构造一个带参数的查询SqlDataSource控件的数据源设置向导提供了三种检索数据的方式:?通过返回表或视图的相关列?通过使用自定义SQL查询?通过使用存储过程? 当使用通过返回表或视图的相关列的方法的时候,需要在“添加WHERE字句”对话框里为WHERE字句设置参数。当使用通过使用自定义SQL查询方法时,需要直接在WHERE字句设置参数(每个参数的形式为:@parameterName)。对第三中方法,因为一个存储过程由一个或几个SQL语句组成,而且在SQL语句中可以设置参数,所以那些SQL语句中设置的参数对存储过程来说是输入参数。? 一个带参数查询的构造取决于SqlDataSource控件的SelectCommand命令是如何设置的,我们接下来使用上面三种方法来构造带参数的查询。打开SqlDataSource文件夹里的ParameterizedQueries.aspx页面,进入设计模式,从工具箱拖一个SqlDataSource控件到页面上,设置其ID为Products25BucksAndUnderDataSource,然后在智能标签中点“配置数据源”链接,选择NORTHWINDConnectionString,点“下一步”。第一步:在“指定来自表或视图的列”模式里添加WHERE字句? 当选择使用SqlDataSource控件从数据库返回数据时,其数据源设置向导允许我们使用最简单的“指定来自表或视图的列”模式(如图1)。此模式会自动生成Select()方法调用时使用的SQL SELECT命名。象上一章探讨的一样,在Products表中选择ProductID,ProductName和UnitPrice三列。?????????????????? 图1:选择“指定来自表或视图的列”模式?? 为给SELECT命令添加WHERE字句,请点击“WHERE”按钮,进入“添加WHERE字句”界面(如图2),首选选择用来筛选记录的列,再选择操作符(比如=, , =, 等),最后选择参数值来源,比如来自查询字符串,视图状态等。完成设置后点“添加”按钮。??? 本例中,我们仅仅返回那些价格小于或等于25的记录。所以我们选“UnitPrice ”列,在操作符中选“=”。当使用“
显示全部