繁体   English   中英

如何在一页上的两个 asp.DataLists 中对 SQL 查询使用两次 URL 参数?

[英]How Do I Use a URL Parameter twice for SQL Queries in two asp.DataLists on one Page?

无论我尝试过什么,我都无法让一个查询起作用。 我需要查询 SQL Server 数据库两次,因为我需要专辑标题下列出的专辑名称(URL 参数)。 我需要歌曲标题下列出的歌曲信息。

这是我在两个 DataList 及其数据源的WHERE子句中使用Album的代码。 第二个WHERE子句导致错误。

<h2 class="w3-container" style="color:blue;">Album</h2>

<strong><p class="w3-container" id="albumParam" ></p></strong>

<script>
    type = "text/javascript"
    document.getElementById("albumParam").innerHTML = location.search.substring(1).substring(6, 150).replaceAll("+", " ").replaceAll("%2f", "/").replace("%26", "&").replaceAll("%2b", "+").replace("%2c", ",").replaceAll("%27", "'");
</script>

<asp:SqlDataSource ID="SqlDataSourceAlbum" runat="server" 
    ConnectionString="<%$ ConnectionStrings:FMConnectionString %>" ProviderName="System.Data.SqlClient" 
    SelectCommand="SELECT Album FROM dbo.c_mymusic_songs WHERE (Album = @Album) ORDER BY Track"></asp:SqlDataSource>
<asp:DataList class="w3-container" ID="DataListAlbum" CellSpacing="3" runat="server" DataSourceID="SqlDataSourceAlbum" ItemStyle-Wrap="false">
    <ItemTemplate>  
        <asp:HyperLink ID="HyperLinkAlbum" runat="server" Text='<%# Eval("Album") %>' />
    </ItemTemplate>
</asp:DataList>

<strong><p class="w3-container" id="AlbumParam" ></p></strong>

<h2 class="w3-container" style="color:blue;">Songs</h2>

<script>
    type = "text/javascript"
    document.getElementById("Param").innerHTML = location.search.substring(1).substring(6, 150).replaceAll("+", " ").replaceAll("%2f", "/").replace("%26", "&").replaceAll("%2b", "+").replace("%2c", ",").replaceAll("%27", "'");
</script>

<asp:SqlDataSource ID="SqlDataSourceSongs" runat="server" 
    ConnectionString="<%$ ConnectionStrings:FMConnectionString %>" ProviderName="System.Data.SqlClient" 
    SelectCommand="SELECT Artist, Album, Track, Title FROM dbo.c_mymusic_songs WHERE (Album = @Album) ORDER BY Track">
    <SelectParameters>
      <asp:Parameter Name="Album" Type="string" DefaultValue=" " />
    </SelectParameters>

</asp:SqlDataSource>

<asp:DataList ID="DataListSongs" runat="server" DataSourceID="SqlDataSourceSongs" RepeatColumns="3"  
    CellSpacing="3" RepeatLayout="Table">  
    <ItemTemplate>  
        <table class="table">  
            <tr>  
                <td>  
                    <%# Eval("Track") %><br />  
                </td>  
                <td>  
                    <%# Eval("Title")%>  
                </td>  
            </tr>  
        </table>  
    </ItemTemplate>  
</asp:DataList>  

第一个查询有效,但第二个 select where子句导致此错误:

“/”应用程序中的服务器错误。
必须声明标量变量“@Album”。

如果我在第二个选择查询中取出WHERE子句,我当然会得到所有歌曲。 但我需要WHERE子句。

<asp:SqlDataSource ID="SqlDataSourceSongs" runat="server" 
    ConnectionString="<%$ ConnectionStrings:FMConnectionString %>" ProviderName="System.Data.SqlClient" 
    SelectCommand="SELECT Artist, Album, Track, Title FROM dbo.c_mymusic_songs ORDER BY Track">
</asp:SqlDataSource>

如何定义标量变量,以便第二个WHERE工作并且没有错误,以便我只能显示 url 专辑参数的歌曲?

您的Request.QueryString不是必须有索引吗? 例如Request.QueryString["Album"].ToString()

看起来您也缺少此部分(在<asp:SqlDataSource/> ):

    <SelectParameters>
        <asp:QueryStringParameter Name="Album" DbType = "String" Direction = "Input" QueryStringField="Album" DefaultValue="" ConvertEmptyStringToNull="True" />
    </SelectParameters>

最后,我不确定它是否会影响您的显示,但我认为与您想要显示的内容相比,您的RepeatColumns="3"已关闭,后者只有 2 列( TrackTitle )。 ( https://www.c-sharpcorner.com/UploadFile/abhikumarvatsa/datalist-control-in-Asp-Net-part-23/ )

这是我找到的一个完整示例: https : //www.aspsnippets.com/Articles/ASPNet-SqlDataSource-pass-value-to-SelectParameter-using-QueryString-Parameter-Example.aspx (它是 VB,但我确定应该完成相同的操作)。

您是否尝试删除第二个数据源中的“SelectParameters”元素? -- 无需深入研究,这就是我看到的这两个数据源之间的巨大差异。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM