在ASP.Net动态查询(WHERE在SqlDataSource的条款)(Dynamic query

2019-10-29 07:16发布

我目前通过阵列(两个值)试图循环和内循环查询中使用这两个值。 请看下面的代码。 现在我的代码不能正常工作。 我试图动态填充的SqlDataSource的“SelectParameters”标签中的“APPTYPE”参数,但是这是不行的。

任何建议?

<%

    Dim appTypes() As String = {"Extranet", "Internet"}

    For Each appType As String In appTypes

%>

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ProviderName = "<%$ ConnectionStrings:CMS.ProviderName %>"
    SelectCommand = "SELECT Applications.Name as AppName, Applications.Abbr as AppAbbr, Types.Name as TypeName, Managers.LastName as LastName, Managers.FirstName As FirstName, Managers.EDKeyEmpID as EDKeyID
        FROM Types INNER JOIN (Managers INNER JOIN Applications ON Managers.ID=Applications.Manager) ON Types.ID=Applications.Type
        WHERE (Types.Name = @appType)
           ORDER BY Types.Name, Applications.Name;"
    ConnectionString="<%$ ConnectionStrings:CMS %>">
    <SelectParameters>
        <asp:Parameter DefaultValue="<%=appType%>" Name="appType"  Type="String" />
    </SelectParameters>   
</asp:SqlDataSource>

<asp:Repeater ID="Repeater1" DataSourceID="SqlDataSource1" runat="server">
    <ItemTemplate>
        <%#Eval("AppName")%> (<%=appType%>)
    </ItemTemplate>
</asp:Repeater>


<% Next %>

Answer 1:

修改您的SqlDataSource有一个OnSelecting成员:

<asp:SqlDataSource ID="SqlDataSource1" runat="server" OnSelecting="OnSelecting"

重置您的SelectParameters恢复正常:

<SelectParameters>
    <asp:Parameter Name="appType" Type="String" />
</SelectParameters>

定义你的代码隐藏此方法。 实现逻辑需要。 在这里,我已经展示了从中继器的虚拟值。 这将是由你来决定如何/在哪里,实际上是来自(或的SelectedItem类似的东西)。

Protected Sub OnSelecting(sender As Object, e As SqlDataSourceSelectingEventArgs) Handles SqlDataSource1.Selecting
    e.Command.Parameters("@appType").Value = Repeater1.SomeValue
End Sub


文章来源: Dynamic query in ASP.Net (WHERE clause in SQLDataSource)