Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SQLite对iPhone页面的限制和排序_C#_Ios_Sqlite_Uitableview_Xamarin.ios - Fatal编程技术网

C# SQLite对iPhone页面的限制和排序

C# SQLite对iPhone页面的限制和排序,c#,ios,sqlite,uitableview,xamarin.ios,C#,Ios,Sqlite,Uitableview,Xamarin.ios,我有一个内置于Xamarin的iPhone应用程序,它将对象存储到本地SQLite数据库。由于加载所有数据需要很长时间,我一次加载20条记录,随着用户滚动加载更多记录 我使用CreatedDate分页,它通过其DateTime.Ticks属性(自DateTime.MinValue以来的100纳秒数)存储为整数字段。我总是将最早加载的CreatedDate传递给read函数 整数列:8字节有符号 DateTime.Ticks:8个有符号字节 编写CreatedDate的代码如下所示: var

我有一个内置于Xamarin的iPhone应用程序,它将对象存储到本地SQLite数据库。由于加载所有数据需要很长时间,我一次加载20条记录,随着用户滚动加载更多记录

我使用CreatedDate分页,它通过其DateTime.Ticks属性(自DateTime.MinValue以来的100纳秒数)存储为整数字段。我总是将最早加载的CreatedDate传递给read函数

  • 整数列:8字节有符号
  • DateTime.Ticks:8个有符号字节
编写CreatedDate的代码如下所示:

var param = cmd.CreateParameter();
param.ParameterName = "@date";
param.Value = myObject.DateCreated.Value.Ticks;
cmd.Parameters.Add(param);
cmd.CommandText = "SELECT * FROM MyTable WHERE CreatedDate < " +
                  (offset.HasValue ? offset.Value.Ticks : DateTime.MaxValue.Ticks) + 
                  " ORDER BY CreatedDate DESC LIMIT " + pageSize;
阅读下一页的代码如下:

var param = cmd.CreateParameter();
param.ParameterName = "@date";
param.Value = myObject.DateCreated.Value.Ticks;
cmd.Parameters.Add(param);
cmd.CommandText = "SELECT * FROM MyTable WHERE CreatedDate < " +
                  (offset.HasValue ? offset.Value.Ticks : DateTime.MaxValue.Ticks) + 
                  " ORDER BY CreatedDate DESC LIMIT " + pageSize;
cmd.CommandText=“从创建数据的MyTable中选择*+
(offset.HasValue?offset.Value.Ticks:DateTime.MaxValue.Ticks)+
“按CreatedDate描述限制排序”+页面大小;
我可以看出日期是正确的,因为我的UITableView中的分区基于它们的CreatedDate

以下是所有奇怪的行为(即我的问题)。

我从模拟器开始。起初,我使用的是DESC,它返回的是最古老的对象。然后我将它切换到ASC,它返回最新的对象。这似乎是倒退。然后,它神奇地开始与DESC一起正常工作。分页开始在模拟器中工作,并且仍然工作

然后我换上了一部真正的iPhone。DESC和ASC问题再次出现,但这次没有解决(ASC返回最新的对象)。无论采用哪种方式,当我滚动到UITableView的底部时,会再次调用具有正确偏移量的加载,但不会返回任何数据(因此所有分页都会停止)

我知道的事情。

  • 所有的数据都在表中,因为如果我
    选择*
    我会得到所有正确的日期。我还将所有日期写入了控制台以确保
  • 我的最新日期是635194634041230000
  • 我最早的日期是63516679680000000
  • 不返回行的偏移日期为635193909600000000

注意。对于我如何做这件事,我可以接受建设性的批评。如果我够喜欢的话,我会投赞成票。但是,如果您发布了包含该信息的答案,请同时尝试解决当前的问题。

创建数据库时,您为CreateData列设置了什么数据类型?如果您使用整数,则勾号应该是确定的

1.2日期和时间数据类型

SQLite没有为存储日期而预留的存储类 和/或时间。相反,SQLite的内置日期和时间函数 能够将日期和时间存储为文本、实数或整数 价值观:

文本为ISO8601字符串(“YYYY-MM-DD HH:MM:SS.SSS”)。像朱利安一样真实 day number,自11月12日格林威治中午以来的天数 公元前244714年,根据公历公历。整数 作为Unix时间,自UTC 1970-01-01 00:00:00以来的秒数


创建数据库时,为CreateData列设置了什么数据类型?如果您使用整数,则勾号应该是确定的

1.2日期和时间数据类型

SQLite没有为存储日期而预留的存储类 和/或时间。相反,SQLite的内置日期和时间函数 能够将日期和时间存储为文本、实数或整数 价值观:

文本为ISO8601字符串(“YYYY-MM-DD HH:MM:SS.SSS”)。像朱利安一样真实 day number,自11月12日格林威治中午以来的天数 公元前244714年,根据公历公历。整数 作为Unix时间,自UTC 1970-01-01 00:00:00以来的秒数


我不在计算机前,所以我不能真正调试您的代码,但是,我想我应该链接到我为MonoTouch编写的一些通用代码,以便从SQLite动态页面数据:

这段代码使用的是SQLite net,而不是System.Data,但它可能仍然有用


分页进出的核心逻辑在GetItem()中。

我不是在计算机前,所以我不能真正调试您的代码,但是,我想我应该链接到我为MonoTouch编写的一些通用代码,以便从SQLite动态分页数据:

这段代码使用的是SQLite net,而不是System.Data,但它可能仍然有用


分页进出的核心逻辑在GetItem()中。

遗憾的是,我没有发布相关代码。如果记录还不存在,我正在写DateTime.Now到专栏。因此,根据WCF服务返回结果的顺序(按日期降序或升序),我的顺序可能是向后的。我不太清楚它为什么拒绝分页,但我猜这与精确度或数据库是否在设备上持久化有关。这两个问题都已解决

遗憾的是,我没有发布相关代码。如果记录还不存在,我正在写DateTime.Now到专栏。因此,根据WCF服务返回结果的顺序(按日期降序或升序),我的顺序可能是向后的。我不太清楚它为什么拒绝分页,但我猜这与精确度或数据库是否在设备上持久化有关。这两个问题都已解决

谢谢你的回答。我确实用了整数。自从我发布这个问题以来,显然有一个错误,但这并没有给我一个真正的答案。我可能很快就会删除这个问题。我认为这是一个愚蠢的错误(写错了createddate)。我只是今晚晚些时候才能在设备上测试,以确保我是正确的。谢谢你的回答。我确实用了整数。自从我发布这个问题以来,显然有一个错误,但这并没有给我一个真正的答案。我可能很快就会删除这个问题。我认为这是一个愚蠢的错误(写错了createddate)。我只是今晚晚些时候才能在设备上测试,以确保我是对的