1

情况的简短描述。

一个 Web 应用程序,用户可以在其中选择一些搜索条件,点击搜索按钮,然后查看显示在网格中的结果。

此应用程序在我们的开发服务器上按预期工作。但是,当部署在客户的服务器上时,网格的分页被破坏了:第一页是正确的,但下一页没有返回正确的行。我只能用一个例子来解释会发生什么:

假设第 1 页应显示结果 1-10,第 2 页应显示结果 11-20,等等。

发生的情况是这样的:第 1 页显示 1-10,第 2页显示1、2、3、4、6、8、9、28、29、30第3页显示 1、2、3、28、29、36 ,37,..

所以行被弄乱了,很多结果都没有显示(替换为上一页的结果)。另请注意,这些行不只是偏离了某个数字。

经过数小时的搜索和调试,我只能得出结论,正在使用的 SqlDataAdapter 的 Fill() 方法返回了错误的结果!适配器使用 SqlCommand,将 SQL 查询作为纯文本。我可以在 SQL Server Management Studio 中运行这个查询,它会返回正确的结果,所以它在 .NET 框架本身内部肯定会出错。

我尝试启用 .NET 源代码调试以进入 Fill 方法,但我无法让它工作,所以基本上我现在没有选择了..

非常感谢任何提示/建议!

<问题已解决,请看下面的答案>

4

1 回答 1

0

我找到了问题的原因。SQL查询手动实现分页(不要问我为什么,代码不是我写的,我只需要维护它;-))。使用了以下语句:

("DELETE FROM #tmp WHERE AccountId IN (SELECT TOP {0} AccountId FROM #tmp);", request.PageStart)
("SELECT DISTINCT TOP {0} ", request.NumRecords);

#tmp 表是在前面的语句中创建的,带有一个特定的 ORDER BY 子句。由于#tmp 表已经排序,您希望删除语句会删除正确的顶部记录。但显然,当将 SqlDataAdapter 与 SQL Server 2012 数据库结合使用时,该顺序不再正确应用。在添加与创建#tmp 表的查询相同的order by 子句后,问题就解决了。还有一个问题:这是错误还是功能?

于 2012-09-26T08:39:43.077 回答