想知道以前是否有人看过它,如果知道的话,他们如何对其进行排序
我在Xamarin Forms中对azure数据进行拉动异步
if (!CrossConnectivity.Current.IsConnected) { return; }
table = Client.GetSyncTable<T>();
var pullOptions = new PullOptions() { MaxPageSize = 100 };
IMobileServiceTableQuery<T> query = table.CreateQuery();
if(Client.SyncContext.IsInitialized)
await table.PullAsync("qryAllEvents", query, pullOptions);
我知道这应该带回5条记录。
在检查Sql Profiler并将断点放到node.js后端时,我看到运行了2个查询,一个查询的OFFSET 0,另一个查询的OFFSET 5,因此将删除所有5条记录。
SELECT * FROM [dbo].[Events] WHERE ([updatedAt] >= @p1) ORDER BY [updatedAt] OFFSET 0 ROWS FETCH NEXT 50 ROWS ONLY; ',@params=N'@p1 datetimeoffset(7)',@p1='1970-01-01 00:00:00 +00:00'
SELECT * FROM [dbo].[Events] WHERE ([updatedAt] >= @p1) ORDER BY [updatedAt] OFFSET 5 ROWS FETCH NEXT 50 ROWS ONLY; ',@params=N'@p1 datetimeoffset(7)',@p1='1970-01-01 00:00:00 +00:00'
该偏移量如何最终出现在table.CreateQuery()
产生的查询中,有什么办法可以防止这种情况发生,所以我可以返回行?
答案 0 :(得分:1)
此偏移量如何最终出现在table.CreateQuery()...的查询中?
SDK将偏移量设置为等于拉动光标的位置。
来自GitHub。
if (offset.HasValue)
{
this.sql.AppendFormat(" OFFSET {0}", offset.Value);
}
也取自GitHub。
internal class PullCursor
{
public int Position
{
get { return this.initialSkip + this.totalRead; }
}
...有什么办法可以防止这种情况发生,以便我返回行?
您的第一个查询没有偏移地运行(cursor.Position为0),然后SDK将偏移量增加了总读取量。 SDK会增加读取的总数,这告诉我您正在返回行。我认为SDK收到结果并保留到本地存储时出了点问题。这是与您类似的SO question。一条答复建议启用SQLite日志记录以获取更多信息,并解释两次调用API的原因。