Windows 8 Metro应用程序应该如何连接到中央数据库?
发布于 2011-12-31 17:16:34
似乎其他人也在Microsoft开发人员论坛上提出类似的问题。
以下是我的发现:
据蒂姆·休尔说
...You不能直接在应用程序中嵌入SQL,也不能使用类似于ADO.NET的内容,这更像是异步/服务基础结构。因此,如果您的数据是通过服务公开的,那么您当然可以通过这种方式进行连接。还有一些其他的轻量级方法可以用于本地存储,也可以使用Windows.Storage命名空间(类似于.NET中的隔离存储)。
莫滕尼尔森同意
您可以使用HttpClient从网上下载几乎任何东西。为什么不将WCF服务配置为以JSON形式返回数据,并使用DataContractJsonSerializer反序列化结果?
还有,蒂姆·霍伊尔警告
...Please注意到,虽然很棒,但codeplex上的SQLWinRT项目是一个包装器,用于与经典的SQLite engine...which通信,使用当前无法通过存储验证的API。
用于WinRT的通用对象存储帮助程序和基于WinRTFile的数据库似乎有一些承诺。
但丹尼尔·斯托特提出了一些好的观点
对构建OData客户端和其他REST客户端的良好支持是很棒的,但这只解决了在线场景。Windows.Storage的“结构化”部分是一个非常有限的模型,本质上仅限于名称/值对,除了最基本的场景之外,还不足以满足所有情况。是的,这里有本地文件存储,这当然很棒。--但强迫所有应用程序开发人员在本地文件存储的基础上构建自己的数据库管理系统--根本就不会削减它,特别是在所有System.Data都已从配置文件中删除的情况下。如果本地文件存储对于大多数设备应用程序来说已经足够了,那么现在像SQLCE这样的东西已经没有意义了。而且SQLCE显然是有目的的,很长一段时间以来,它在偶尔连接的设备应用程序中扮演了非常重要的角色。还需要与服务器端数据库(如SQL )进行同步,主要是为了能够在设备之间漫游数据。是的,WinRT中有漫游存储模型,但它与上面提到的本地存储具有相同的限制,而且最重要的是容量非常有限(如果内存可用,目前的容量为30 if )。除了最简单的漫游数据需求外,它根本不足以满足所有的需求。再一次,强迫每个应用程序开发人员设计和实现自己的同步解决方案是非常糟糕的。您可以做得更好,使开发人员。
许多人对System.Data命名空间在WinRT中不受支持感到失望。
理查德·贝瑟尔
我对此连话都没说。这太令人吃惊了。暂时抛开他们想要迫使您抽象到中间件中进行数据库连接的问题--我不同意,但我可以准理解其中的理由。我甚至可以看到这种发展的途径。 但是没有System.Data..。完全没有?你知道你对我们做了什么吗? System.Data除了为Sql、OleDb和其他自定义提供程序(如Oracle )提供程序之外,还可以提供丰富的XML数据集抽象,使您能够非常快速地构建面向数据的服务体系结构。 例如,我可以使用SOAP或WCF轻松地创建一个返回DataSets或DataTables的web服务,然后轻松直接地使用这些对象。能够这样做可以非常快速地构建n层体系结构,即使没有直接的数据连接。 如果没有System.Data,以及DataViews、DataTables等的强大功能,这将变得更加困难。当然,您可以自定义创建结构,将数据放在其中,并提供结构,并使用Linq进行任何您想做的排序、筛选等工作.但最终它的工作量是原来的两倍,使得代码重用变得更加困难。这意味着使用我们现有的面向服务的体系结构是不可能的(如果没有大的改革)。 System.Data的退出对于开发人员来说是一件需要处理的大事,就像VB6中的打印机对象被vb.net 1.0所丢失一样。在这种情况下,更难理解的是为什么它是必要的-在Metro配置文件中重新启用它不可能是产品的技术困难,对吗? 这是非常有价值的,我会认真考虑将Mono的System.Data类作为我创建的任何应用程序的一部分(显然,它必须是开源的)。
发布于 2011-12-30 19:21:37
我认为这是另一个“视情况而定”的问题.
第一个也是最明显的问题是,这在很大程度上取决于应用程序运行的环境,比如第一个例子"Obviously...support...disconnected“是否是真的--如果应用程序是一个内部企业应用程序,那么在这种情况下很可能没有db ==不工作。
第二你可以看(嗯,皮疹.假设您可以查看,这可能是一个错误的假设)本地SQL数据库和远程数据库之间的数据库同步等等。
后退一步..。是的--你是绝对正确的,把它看作和电话或silverlight一样(虽然我不知道是否有RIA支持)--但在这一点上,很难有明确的规定,因为考虑到一个通用平台,因此可以编写适合各种用途的应用程序。
这并不是一个非常有帮助的答案,而是一个开始。
读了“吉姆·G的回答”之后,我似乎应该收回我的答案了?
https://stackoverflow.com/questions/8681842
复制相似问题