我是ASP.NET新手
我正在尝试将查询与会话变量中的条件结合起来。
基本上,我捕获某些输入并在下面构建一个Session会话。我知道它的工作原理是Response.Write。
Session("QueryCondition") = " AND Name like '%Test%' AND CompLeteFlag = 1"
我的GridView1中有一个SelectCommand
SelectCommand="SELECT top 100 * FROM [EnhanceTracking] WHERE 1 = 1 order by ID DESC"
我想做的是上面的查询结合Session(“QueryCondition”)来过滤记录。如果是经典的ASP,那么就可以这样做
SelectCommand="SELECT top 100 * FROM [EnhanceTracking] WHERE 1 = 1 " & Session("QueryCondition") & " order by ID DESC"
但是,我不知道如何在ASP.NET中执行此操作,因为它不允许将变量与SelectCommand组合。
请告知该怎么做。 谢谢你。
答案 0 :(得分:0)
我做了类似的Web应用程序。您可以利用asp:SqlDatasource的OnSelecting事件(我建议使用它而不是在代码隐藏中动态构建select命令)来动态调整select命令的参数。
我不确定这是否是最佳方式,但它有效。
我的标记看起来像这样(GridView标签简化):
<asp:SqlDataSource ID="SelectItemsDataSource" runat="server"
ConnectionString="<%$ ConnectionStrings:hubConnectionString %>"
ProviderName="<%$ ConnectionStrings:hubConnectionString.ProviderName %>"
SelectCommand="SELECT itemEntity.id, itemEntity.name, itemEntity.filename, itemEntity.type, itemEntity.added, userEntity.name FROM item AS itemEntity
LEFT OUTER JOIN USER AS userEntity ON itemEntity.uploader = userEntity.id WHERE itemEntity.type like @type ORDER BY itemEntity.added DESC"
OnSelecting="onItemSelecting">
<SelectParameters>
<asp:Parameter Name="@type" Type="String" />
</SelectParameters>
</asp:SqlDataSource>
<asp:GridView ID="ItemGrid" runat="server" DataSourceID="SelectItemsDataSource"/> // Simplified
注意OnSelecting属性。
然后在代码隐藏中,您可以简单地处理OnSelecting事件:
protected void onItemSelecting(object sender, SqlDataSourceSelectingEventArgs e)
{
// Type value NOT given and parameter exists - Set wildcard
if (Request.QueryString["type"] == null && e.Command.Parameters.Contains("@type"))
{
e.Command.Parameters["@type"].Value = "%";
return;
}
if (Request.QueryString["type"] != null && e.Command.Parameters.Contains("@type"))
e.Command.Parameters["@type"].Value = Request.QueryString["type"];
}
我相信Command.Parameters方法是sql注入安全的。如果没有,请有人纠正我。