C# 通过分页从AX获取记录[AX 2009]
我试图从AX一次获取一定数量的记录。 我想做一些相当于:C# 通过分页从AX获取记录[AX 2009],c#,dynamics-ax-2009,business-connector,C#,Dynamics Ax 2009,Business Connector,我试图从AX一次获取一定数量的记录。 我想做一些相当于: SELECT * FROM (SELECT *, ROW_NUMBER() AS ROWNO FROM TableName) AS TableName WHERE ROWNO > startIndex AND ROWNO <= endIndex; 目前,我正在使用.net business connector从AX获取所有记录: axRecord.ExecuteStmt("select * from %1");
SELECT * FROM (SELECT *, ROW_NUMBER() AS ROWNO
FROM TableName)
AS TableName WHERE ROWNO > startIndex
AND ROWNO <= endIndex;
目前,我正在使用.net business connector从AX获取所有记录:
axRecord.ExecuteStmt("select * from %1");
i = 0;
while(axRecord.Found)
{
if(i<startIndex)
{
i++;
continue;
}
// Perform operations
i++;
if(i==endIndex)
{
break;
}
}
是否有更好的方法仅使用Business connector来执行此操作?请帮助在X++的内部SQL语法中,有一些关键字firstOnly、firstOnly10、firstOnly100、firstOnly1000来限制要获取的行数。它可以与RecId字段结合使用,以手动获取模拟分页的行组:
select firstonly10 inventTable // only fetch 10 rows
index hint ItemIdx
where inventTable.RecId > lastRecIdFetched // save last recId for each page
&& inventTable.itemId == itemId;
您在MSDN上有select语句的完整语法参考:
在X++的内部SQL语法中,有一些关键字firstOnly、firstOnly10、firstOnly100、firstOnly1000来限制将获取的行数。它可以与RecId字段结合使用,以手动获取模拟分页的行组:
select firstonly10 inventTable // only fetch 10 rows
index hint ItemIdx
where inventTable.RecId > lastRecIdFetched // save last recId for each page
&& inventTable.itemId == itemId;
您在MSDN上有select语句的完整语法参考:
我们正在开发一个仅使用AX的应用程序。我们打算让它完全不需要直接查询SQL server。如果在AX X++类中执行while循环并返回包含在顶部X中的临时表,会不会有性能提升?我们正在开发一个仅使用AX的应用程序。我们打算让它完全不需要直接查询SQL server。如果在AX X++类中执行while循环并在顶部X中返回一个临时表,会不会有性能提升?这个想法很好,但是您必须按照RecId而不是ItemId进行排序,第二个条件inventTable.ItemId==ItemId有点奇怪,因为它不会返回超过1条记录。您是对的,我复制并粘贴了一些代码来说明我的参数。我的描述有明显的局限性,但你明白了,如果没有一些创造性的方法,你无法实现分页。没有现成的解决方案可以做到这一点,因为AX客户端上的标准表单可以通过内部缓存系统精细读取表上的所有记录,但是您必须按照RecId而不是ItemId进行排序,第二个条件inventTable.ItemId==ItemId有点奇怪,因为它不会返回超过1条记录。您是对的,我复制并粘贴了一些代码来说明我的参数。我的描述有明显的局限性,但你明白了,如果没有一些创造性的方法,你无法实现分页。没有现成的解决方案可以做到这一点,因为AX客户机上的标准表单可以通过内部缓存系统精细读取表上的所有记录。