【问题标题】:How to add more than one SQL statement/Query String on 1 DataSource?如何在 1 个数据源上添加多个 SQL 语句/查询字符串?
【发布时间】:2023-03-15 06:00:01
【问题描述】:

我目前在我的 ListView 控件上有以下语句,其中 QueryString 设置为 ProductCategory:

SELECT * FROM Products WHERE (ProductCategory = ?)

我想在同一个数据源上添加这个语句和查询字符串,以允许 ProductModel 的查询字符串,我该怎么做?

SELECT * FROM Products WHERE (ProductModel = ?)

列表视图

  <asp:ListView runat="server" ID="listView" GroupItemCount="3" 
        DataSourceID="AccessDataSource1">
    <LayoutTemplate>
        <div style="height: 966px;">
        <div style="width: 771px;">
            <asp:PlaceHolder runat="server" ID="groupPlaceHolder" />
        <asp:DataPager runat="server" ID="dpMyDatePager" PageSize="9"
 PagedControlID="listView">
<Fields>
    <asp:NextPreviousPagerField ButtonType="Button" ShowLastPageButton="True"
     ShowFirstPageButton="True" />
     <asp:NumericPagerField />
</Fields>
</asp:DataPager>
        </div>
    </LayoutTemplate>
    <GroupTemplate>
        <div style="clear: both;">
            <asp:PlaceHolder runat="server" ID="itemPlaceHolder" />
        </div>
    </GroupTemplate>
    <ItemTemplate>
<div class="productItem">
    <div>
        <img src='<%# Eval("ProductUrl") %>' >
    </div>
    <div class="catalog-price">
    <br />    
            <%# Eval("ProductBrand") %>
            <%# Eval("ProductModel") %></div>

    <div class="catalog-price2">
        <b>
        Our Price: S$<%# Eval("NormalPrice") %></div>
        </b><br />
    <div class="cell1">
        Add to cart</div>
    <div class="cell2">
    <asp:HyperLink ID="HypViewDetails" style="text-decoration:none"      NavigateUrl='<%#Eval("ProductId", "ProductDetails.aspx?ProductID={0}")%>'
 runat="server">View Details</asp:HyperLink>
        </div>
</div>
</ItemTemplate>
    <ItemSeparatorTemplate>
        <div class="itemSeparator">
        </div>
    </ItemSeparatorTemplate>
    <GroupSeparatorTemplate>
        <div class="groupSeparator">
        </div>
    </GroupSeparatorTemplate>
    <EmptyDataTemplate>
    </EmptyDataTemplate>
</asp:ListView>
    <asp:AccessDataSource ID="AccessDataSource1" runat="server" 
        DataFile="~/App_Data/TabStoreDB.mdb" 

            SelectCommand="SELECT * FROM Products WHERE (ProductCategory = ?) OR    (ProductBrand = ?)">
        <SelectParameters>
            <asp:QueryStringParameter Name="?" QueryStringField="ProductCategory" />
            <asp:QueryStringParameter Name="?" QueryStringField="ProductBrand" />
        </SelectParameters>
    </asp:AccessDataSource>

【问题讨论】:

    标签: asp.net sql database visual-studio ms-access


    【解决方案1】:

    除非我完全不理解你的问题。您可以添加AND/OR 给您WHERE 子句

    OR WHERE 子句

    SELECT * 
    FROM Products 
    WHERE (ProductCategory = ?)
    OR (ProductModel = ?)
    

    AND WHERE 子句

    SELECT * 
    FROM Products 
    WHERE (ProductCategory = ?)
    AND (ProductModel = ?)
    

    根据您的编辑,您有两个查询参数是? - 他们每个人都需要有一个特定的名字

    SelectCommand="SELECT * FROM Products WHERE (ProductCategory = @ProductCategory) OR    (ProductBrand = @ProductBrand)">
            <SelectParameters>
                <asp:QueryStringParameter Name="ProductCategory" QueryStringField="ProductCategory" />
                <asp:QueryStringParameter Name="ProductBrand" QueryStringField="ProductBrand" />
            </SelectParameters>
    

    如果您不确定如何使用参数,我建议您阅读以下内容:

    http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.sqldatasource.selectparameters.aspx

    http://msdn.microsoft.com/en-us/library/xt50s8kz.aspx

    【讨论】:

    • 嗨,我已经尝试了上述语句,但是当我尝试访问产品模型时,我的 ListView 控件上没有出现任何内容。 Products.aspx?ProductModel=Acer
    • 我认为您需要提供有关您正在尝试做的事情的更多详细信息。您要按 ProductCategory OR ProductModel 搜索吗?
    • 我希望它能够被 ProductCategory 或 ProductModel 搜索。例如,当输入 Products.aspx?ProductCategory=Accessories 时,ListView 将显示所有配件,当输入 Products.aspx?ProductModel=Acer 时,ListView 将显示所有型号为“Acer”的产品
    • @aurelio -- 您尝试了上述两种说法中的哪一种?第一个(使用 OR)应该至少和你原来的查询一样工作......
    • @kuru kuru 我已经尝试了这两种说法,但没有奏效:/
    【解决方案2】:

    您为两个参数指定了相同的名称。你需要具体——试试这个:

    SelectCommand="SELECT * FROM Products WHERE (ProductCategory = @cat) OR    (ProductBrand = @brand)">
    

    然后是这个:

    <SelectParameters>
                <asp:QueryStringParameter Name="cat" QueryStringField="ProductCategory" />
                <asp:QueryStringParameter Name="brand" QueryStringField="ProductBrand" />
            </SelectParameters>
    

    【讨论】:

    • 我已经尝试过您的建议,但 ListView 仍然没有显示任何内容。很奇怪。
    • 抱歉——不知道还有什么建议。我的 @ 表示法来自 sql-server——你可以对照 Access 检查它,看看它是否需要其他东西。
    • 没问题,感谢您的帮助。欣赏它:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-21
    • 1970-01-01
    • 2014-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多