【问题标题】:asp.net C# slow loading time when using sqldatasourceasp.net C#使用sqldatasource时加载时间慢
【发布时间】:2011-11-04 14:17:19
【问题描述】:

我需要提交一份包含三个类似过滤器的报告

select * from foo where condition 1 and condition 2 and condition 3

所以我使用对象数据源并将三个参数绑定到三个不同的下拉菜单,效果很好,但是有人问我,下拉菜单中的第一个选项是“全部”——意思是没有过滤器。 由于我只知道如何使用 sqldata 源来执行此操作,因此我切换了控件并使用了以下代码

<asp:SqlDataSource ID="SqlDataSource2" runat="server" 
            ConnectionString="<%$ ConnectionStrings:testConnectionString %>" 
            SelectCommand="SELECT * FROM [Tickets_data]  ORDER BY [Open_Time]"
            FilterExpression="[Lote] like '{0}%'">
           <FilterParameters>
          <asp:ControlParameter ControlID="DropLote" Name="Lote" PropertyName="SelectedValue" Type="String"/>
            </FilterParameters>
        </asp:SqlDataSource>

它可以工作,但是加载时间很慢,比如 9 或 10 秒,而且下拉菜单中的每次刷新也非常慢。

有什么建议吗?

【问题讨论】:

  • 您是否尝试过分析您的 SQL 以了解它为什么很慢?您使用 select 语句检索了多少数据?
  • 哪里慢了?查询是否需要很长时间才能运行?使用 sql server 查询分析器(如果您使用的是 sql server)来查找。
  • 另外请记住,如果您将大量输出渲染为表格,浏览器将等到整个表格下载完成后再渲染。如果您使用更简单的标记,您可能会发现页面更早开始呈现。

标签: c# asp.net sql objectdatasource


【解决方案1】:

看起来你的线路有问题:

[Lote] like '{0}%'

当参数为空时 - SqlServer 将每个简单记录与“%”进行比较。在这种情况下,您可以尝试破解 sql 语句:

'{0}' = '' or [Lote] like '{0}%' 

当 {0} 为空时,这将使 SQL Server 仅评估第一部分并跳过第二部分(如“{0}%”)。


但对于未来,我建议不要直接从 UI 中接触 sql 语句,这可能会使您的应用程序在某些时候变得非常僵化。因此,您将所有内容都移至代码隐藏(甚至更好地在代码隐藏后移至数据访问层)。

【讨论】:

    猜你喜欢
    • 2019-06-15
    • 2013-11-07
    • 1970-01-01
    • 2011-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-23
    • 2011-03-09
    相关资源
    最近更新 更多