.nettiers 数据源不对查询应用过滤器
.nettiers datasource does not apply filter on query
我有一台有 13K 条记录的 table 和一台有点旧的 sql 机器。
在有问题的页面中,我有一个 netTiers 数据源,该数据源超时。
我的问题是在 page_load 我设置了过滤器:
vwImmobileCommessaAttivoDataSource.Filter = "ImmobileId = '" + Request.QueryString["ImmobileId"] + "'";
将结果数从 13K 更改为 10。
但我看到生成查询是:
BEGIN
SELECT * FROM [dbo].[vwImmobileCommessaAttivo]
ORDER BY [CommessaId]
-- get total count
SELECT @@ROWCOUNT AS TotalRowCount;
END
没有过滤器,超时。
有加速查询的方法吗?包括我的过滤器?
我个人使用 DevExpress 网格并使用如下方式直接绑定到它们:
grid.DataSource = new vwImmobileCommessaAttivoService().Find(string.format("ImmobileId='{0}'", Request.QueryString["ImmobileId"]));
grid.DataBind();
如果您的过滤器只会将您从 13k 减少到 10k,而您在 13k 条记录时超时,那么我认为您将需要研究某种形式的分页选项以减少 return记录。如果你开启了SQL2005的特性,它会内置一些分页,但我从来没有亲自尝试过,所以我不知道它的效果如何。默认的 Nettiers 分页仍然从 sql 获取所有记录并在内部进行分页。
就您现有的代码而言,它确实在做您期望的事情。 .Filter 只有在 EnablePaging 和 EnableSorting 都设置为 false 时才有效。你有没有试过:
vwImmobileCommessaAttivoDataSource.SelectMethod = vwImmobileCommessaAttivoSelectMethod.Find;
vwImmobileCommessaAttivoDataSource.WhereClause = "ImmobileId = '" + Request.QueryString["ImmobileId"] + "'";
我有一台有 13K 条记录的 table 和一台有点旧的 sql 机器。
在有问题的页面中,我有一个 netTiers 数据源,该数据源超时。
我的问题是在 page_load 我设置了过滤器:
vwImmobileCommessaAttivoDataSource.Filter = "ImmobileId = '" + Request.QueryString["ImmobileId"] + "'";
将结果数从 13K 更改为 10。
但我看到生成查询是:
BEGIN
SELECT * FROM [dbo].[vwImmobileCommessaAttivo]
ORDER BY [CommessaId]
-- get total count
SELECT @@ROWCOUNT AS TotalRowCount;
END
没有过滤器,超时。
有加速查询的方法吗?包括我的过滤器?
我个人使用 DevExpress 网格并使用如下方式直接绑定到它们:
grid.DataSource = new vwImmobileCommessaAttivoService().Find(string.format("ImmobileId='{0}'", Request.QueryString["ImmobileId"]));
grid.DataBind();
如果您的过滤器只会将您从 13k 减少到 10k,而您在 13k 条记录时超时,那么我认为您将需要研究某种形式的分页选项以减少 return记录。如果你开启了SQL2005的特性,它会内置一些分页,但我从来没有亲自尝试过,所以我不知道它的效果如何。默认的 Nettiers 分页仍然从 sql 获取所有记录并在内部进行分页。
就您现有的代码而言,它确实在做您期望的事情。 .Filter 只有在 EnablePaging 和 EnableSorting 都设置为 false 时才有效。你有没有试过:
vwImmobileCommessaAttivoDataSource.SelectMethod = vwImmobileCommessaAttivoSelectMethod.Find;
vwImmobileCommessaAttivoDataSource.WhereClause = "ImmobileId = '" + Request.QueryString["ImmobileId"] + "'";