2013-02-18 86 views
0

我的WinForms C#/ .NET应用程序需要一个表/网格控件来向最终用户显示记录。记录很简单,只包含两个字段,一个字符串和一个日期/时间字段。我需要坚持数据,我想知道最有效的控制和存储后端将使用什么。数据不重要(即 - 不是健康或财务记录,或任何需要广泛安全或任何加密的敏感内容)。C#中持久表/网格的正确解决方案不需要完整的数据库解决方案?

迄今为止发现的一种解决方案是DataGrid控件与SQL Server Compact Edition结合使用。我了解从本教程此解决方案:

http://www.dotnetperls.com/datagridview-tutorial

看来,虽然这可能是矫枉过正了我的申请。另外,我很担心安装SQL Server CE的复杂性,特别是当它安装过程中,管理员对用户帐户的权限问题:

http://msdn.microsoft.com/en-us/library/aa983326(v=vs.80).aspx

有一个表或网格控制内置文件加载/保存功能,它使用简单的磁盘文件作为存储方法,可能是逗号分隔的ASCII文件?我想要一些我仍然可以使用SQL(通过LINQ)进行交互的东西。另外,我希望这可以透明地完成。也就是说,如果我想稍后升级到SQL数据库引擎解决方案,那么与我的数据接口的代码将不会更改(当然也可能是数据库打开/创建代码除外)。

还是我还不如干脆咬咬牙,与SQL Server CE或也许SQLite的打算:

Good embedded database solution (like SQLite) for .Net

如果您有关于安装问题和易用性的任何警告或轶事,他们会赞赏。

回答

2

在我的项目中,我们使用Object数据源。网格可以像数据表一样容易绑定到对象集合。您可以使用简单的序列化引擎来存储/恢复数据(XmlSerializer相当容易实现)。创建一个基本对象,使用List或BindingList作为数据集,并在需要时在后端序列化/反序列化它。

List和BindingList都支持Linq查询。

稍后添加数据库保存就像编写将对象保存到数据库的代码一样简单,而不是序列化代码,根本不需要更改前端。

至于一个“正确”的解决方案来讲......有这么多不同的方式来做到这一点,它归结为个人喜好,以及可能的实际需要和预期未来的发展。我发现使用对象进行编码更容易,因为数据操作更容易,但如果您打算直接输入记录,则不需要数据操作,直接进入数据库更容易。这只取决于数据以及您计划如何使用它。

+0

谢谢。你知道一个简明的教程,演示你所建议的技术(一个带有Object数据源的网格控件)吗?我发现到目前为止:http://tech.pro/tutorial/776/csharp-tutorial-binding-a-datagridview-to-a-collection – 2013-02-18 20:11:20

+1

该教程显示了你需要知道的一切。 Object,PropertyChanged,BindingList等等。你可以声明自定义列表实现并自己实现IBindingList接口,虽然这有点POTA! (在那里,这样做,不想再次这样做)。查看一下XmlSerializer的基本实现,这应该是其他基础知识来完成某些工作。 – Nevyn 2013-02-18 20:40:23

+1

比基础知识稍微复杂一些,但它也包含这些内容。这个例子着重于属性,它可以让你看到你的对象生成的xml究竟是什么样的。在网络之间来回传递(SOAP和其他类似的协议)时很方便。 http://www.codeproject.com/Articles/14064/Using-the-XmlSerializer-Attributes – Nevyn 2013-02-18 20:42:26

2

我强烈建议您使用嵌入式数据库,因为在不久的将来可以更容易地转到完整的数据库。 SQL Server CE是一个很好的选择,如果你想变得更大,你可以简单地去完整的SQL Server数据库,只需对代码进行最小的修改,SQL Server CE唯一的缺点是你需要安装它,它需要除了.NET Framework 4之外,我没有看到它的大问题。

+1

+1为嵌入式数据库路由。但请注意,此时SQL Store应用程序(以前称为Metro)不支持SQL CE。 Sqlite IS支持。如果Windows 8是潜在的目标平台,请注意一点。 – 2013-02-18 20:29:59

+1

@chuex,谢谢,因为他没有提到WinRT或Windows应用商店应用,我假定他提到了完整的.NET开发,但是当然如果你的目标是WinRT,唯一支持的数据库(截至目前)是SQLite,除非您想使用Web Services和OData,否则无法选择更高级别的数据库。 – Rafael 2013-02-18 20:38:36