来自外部MS SQL Server DB的IPad SQLite推送和拉取数据

时间:2010-11-15 23:25:27

标签: iphone sql-server web-services ipad sqlite

这是我之前发布的帖子(http://stackoverflow.com/questions/4182664/ipad-app-pull-and-push-relational-data)。我的计划是,当ipad应用程序启动时,我将通过webservice从webhosted MS SQL Server DB中提取数据(配置数据,即Departments,Types等等在系统中使用的关系数据)并将其填充到SQL Lite中在iPad上的数据库。然后,当我加载一个列表时,我将通过webservice再次将数据拉到该行上,并将其填充到ipad上的SQL Lite数据库中(而不仅仅是运行select命令来填充列表)。

我的问题是: 1.通过网络传输数据的最有效方法是什么?每个人似乎都以不同的方式做到这一点。我的想法是,我将为每种类型的数据提取(例如RetrieveContactListing)提供一个webService,它将查询数据库并将该数据转换为“某事”以通过该行发送。我的问题是它应该转换成什么“东西”? 每个人都谈论odata服务。这适用于需要复杂读写的应用程序吗?

我之前创建了一个简单的iphone应用程序,然后与sql server db(我刚刚在线上发送了我自己的结构化xml)进行了交谈,但现在使用这个应用程序,数据调用将会更大,因此效率是关键。< / p>

2 个答案:

答案 0 :(得分:0)

我会给出这类问题的“标准”答案(总是得到很好的评分) - 稍微处理一下你的具体问题:

忘掉你“将记录从一个数据库移动到另一个数据库”的事实。您只是从一个数据库中读取数据 - 通过网络发送数据 - 解析它 - 并将其写入iPhone数据库。

要做到这一点:

  1. 在运行MS SQL服务器的Web服务器上,根据某些Web查询(或不读取)编写一个网页(perl,ASP,无论你想要什么),从MS SQL数据库中读取适用的内容,并以XML格式输出

  2. 在iPad上,使用NSXMLParser类来请求和解析 XML数据。关于NSXMLParser的 nice 事情是,它完成了实际打开HTTP连接,通过网络获取数据以及在一次调用中解析XML 的所有工作, :

    • (id)initWithContentsOfURL:(NSURL *)url
  3. 使用NSXMLParser调用从解析的XML文档中获取所需数据,并使用标准Core Data服务将其写入本地iPhone数据库。

答案 1 :(得分:0)

我建议您的服务器端代码返回JSON而不是XML,因为这在iOS端更容易使用。 (并且在服务器端设置相对简单)

同样从应用程序中,发送一个标题字段,其中包含应用程序上次查询数据的日期,并使您的服务器端代码仅返回自该日期以来已更改的数据。使用SQL Server上的日期列来记录已更新的行。

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:requestURL]];
[request setValue:lastCallTime forHTTPHeaderField:@"If-Modified-Since"];

lastCallTime是来自NSDictionary的条目,它保存响应标题中的日期......

[response allHeaderFields][@"Date"]

这是一篇关于如何在服务器上获取If-Modified-Since值的文章,http://madskristensen.net/post/use-if-modified-since-header-in-aspnet

然后您可以在查询中使用

最后一件事是确保服务器返回压缩的数据,因为这有助于提高性能,默认情况下iOS会在到达时对其进行解压缩