配置过滤和选择参数有两种方法1、使用配置向导配置参数,参见:
2、以声明的方式选择数据
要选择数据,需要使用数据源的SelectParameters ,代码清单如下:(使用SelectParameters )
- <asp:SqlDataSource ID="SqlDataSource1" runat="server"
- ConnectionString="<%$ ConnectionStrings:NorthwindConnectString %>"
- SelectCommand="SELECT * FROM [Products] WHERE
- ([ProductName] LIKE '%' + @ProductName + '%')">
- <SelectParameters>
- <asp:ControlParameter Name="ProductName" Type="String"
- ControlID="TextBox1" PropertyName="Text" />
- </SelectParameters>
- </asp:SqlDataSource>
上面代码显示用向导配置SqlDataSource 控件的结果(向导生成的源代码)。在此选择(Select)命令中已经增加了Where子句。注意,Where子句中的参数就像是一个标准SQL Server参数,它前面有一个@字符。另外还可以注意到,ControlParameter的Name属性与查询中的参数名匹配。可以使用任何值作为参数的名,但是它必须与实际参数匹配,另外让参数名与列名相同能增加代码可读性。
3、多个SelectParameters
- <asp:SqlDataSource ID="SqlDataSource1" runat="server"
- ConnectionString="<%$ ConnectionStrings:NorthwindConnectString %>"
- SelectCommand="SELECT * FROM [Products] WHERE
- ([ProductName] LIKE '%' + @ProductName + '%')
- AND UnitPrice < @UnitPrice
- AND Discontinued = @Discontinued">
- <SelectParameters>
- <asp:ControlParameter Name="ProductName" Type="String"
- ControlID="TextBox1" PropertyName="Text" />
- <asp:ControlParameter Name="UnitPrice" Type="Decimal"
- ControlID="PriceList" PropertyName="SelectedValue" />
- <asp:QueryStringParameter Name="Discontinued" Type="Boolean"
- QueryStringField="Discontinued" />
- </SelectParameters>
- </asp:SqlDataSource>
这里有3个参数。第一个与前面所示的相同,第二个只匹配UnitPrice小于某个给定值的行,第三个匹配Discontinued列。
SelectCommand还是标准SQL格式,但是每个参数在SelectParameters中有一个入口。前面两个从控件取值,其中第一个参数从TextBox的Text属性取值,第二个参数从一个列表的SelectedValue取值。这说明,可以从控件的任何属性取值。第三个参数的值来自QueryString,这说明同一个查询中可以混合不同类型的参数。
4、使用FilterExpression 和FilterParameters
过滤稍有点不同,在此不修改SelectCommand,但是要增加一个FilterExpression属性,而且使用FilterParameters而不是SelectParameters。代码如下:
- <asp:SqlDataSource ID="SqlDataSource1" runat="server"
- ConnectionString="<%$ ConnectionStrings:NorthwindConnectString %>"
- SelectCommand="SELECT * FROM [Products]"
- FilterExpression="ProductName LIKE '{0}%'">
- <FilterParameters>
- <asp:ControlParameter Name="ProductName" Type="String"
- ControlID="TextBox1" PropertyName="Text" />
- </FilterParameters>
- </asp:SqlDataSource>
注意,FilterExpression中的参数并没有显式命名,它们根据位置来标识。所以{0}就是指FilterParameters中的第一个参数;后面参数依序分别是{1}, {2}, 等等。
参考:
ASP.NET 2.0 Illustrated (英)Alex Homer;Dave Sussman
Chapter 3. Data Source and Data Display Controls---Data Source Controls