1

我正处于编写供多个用户使用的桌面应用程序的最早阶段。我正在寻找有关解决此问题的最佳方法的建议。

规格

我会将我的模型保存在一个文件中,该文件通常会在映射的网络驱动器上使用。(用于设计道路和其他线性特征,如铁路和溪流。)

各种最终用户需要能够同时连接和编辑文件。例如,Billy Bob 正在研究名为 US321 的道路,而 Rupert 正在研究 I40。每条道路的模型都存在于同一个文件中。最终用户可以“声明”任何道路名称,其中只有声明者可以编辑给定的道路。当比利鲍勃声称时,鲁珀特无法编辑 US321,但鲁珀特可以阅读 US321 以供参考。一旦用户完成对道路数据的编辑,他可以发布声明,其他人可以对其进行编辑。

序列化的限制?

我对序列化的理解非常有限(请参阅我的个人资料)。但在我看来,对象和序列化文件之间存在一对一的关联。因此,如果我使用序列化来实现这一点,就不可能只声明它的一部分,也不可​​能只更新它的一部分。(这是正确的吗?如果不是,那么我可以使用序列化,对吗?)

我正在考虑的解决方案

我正在考虑使用 SQL Server Express,并且我对社区对此的警告、更正或确认感兴趣。

最终用户不必知道我在后台使用 SQL Server Express。(我什至会将文件扩展名更改为适合我的应用程序的内容。)我会将道路加载到列表中,并且每条道路都是“可声明的”。声明一条道路将在数据库中标记它,以便应用程序的其他实例做出相应的反应,有点像它是一个共享的 MS Excel 文件,多人可以同时编辑,但(类似于 Excel)能够锁定个人工作表。

[编辑] 请参阅下面的 Micah Armantrout 的内容丰富的回复。所以现在我想知道使用 Microsoft Access 作为中介数据库应用程序。

[编辑]

结论

感谢大家提供有用的答案和评论。Micah 的回答非常有帮助,因为我没有意识到我会被限制为仅由一台服务器控制的文件。虽然现在它很有意义,但我没有预料到,如果我走那条路,我会在朝那个方向工作几个小时后搁浅。

当我第一次阅读 urbadave 的想法时,我认为它是我已经考虑过但不喜欢的东西。但仔细想想,这显然是最简单的方法。我只是使用一个目录,就像它是一个文件一样,但对我的顶级子对象具有用户透明度。但显然,将我的整个模型封装到一个文件中是很有吸引力的。

所以这就是我决定做的事情:就像 urbadave 建议的那样,从写入目录开始。然后稍后测试将其放入 zip 目录并使用 ZipPackage 类提取并插入单个序列化文件(或 XML 文件——我必须有一天做出另一个决定)。

  • 保罗
4

2 回答 2

4

SQL Server 可以满足您的需求,但如果您要拥有多个用户,则需要将机器设置为服务器。在每台机器上安装 sql server express 对您没有任何好处它可能是用户机器之一或带有 SQL server express 的实际服务器,您需要将其设置为可在当前机器之外访问按照本教程执行此操作。

如果您使用 Windows XP SP2 之前的任何设备,则需要按照这些说明打开防火墙的端口,这也在下面的链接中进行了讨论。

http://blogs.msdn.com/b/sqlexpress/archive/2005/05/05/415084.aspx

就共享数据而言,我的意思是看到其他人的工作。如果您不想在服务器上安装 sql server,您可以使用 MS Access 我会向您推荐一篇关于何时使用的文章

http://www.techrepublic.com/article/should-you-use-sql-server-express-edition-or-microsoft-access-for-your-small-business-applications/6140859

于 2012-04-18T01:15:13.667 回答
1

虽然我可以在工作中访问一个不错的数据库,但我的大部分个人编程都不使用数据库。我过去使用的技巧之一是文件扩展名是为了传达意义。在您的情况下,您可以利用文件扩展名来指示声明并控制对主文件的写入。

没错,您可能希望将每个道路对象序列化到自己的文件中。主文件将是包含所有这些单独道路对象的集合对象的序列化。

用户选择并打开这些道路文件。在打开文件之前,用户的应用程序会重新命名文件,添加扩展名(可能是用户的 id)。这样,您可以使用目录扫描来查找已声明和未声明的文件。

只有当用户在他们正在工作的道路上发布他们的声明时,才会写入主文件。用户的应用程序打开所有道路文件,使用道路对象组装一个主对象,然后将该对象序列化到主文件中。完成后,用户应用程序通过重命名来释放用户对道路文件的声明。

在写入主文件之前,用户的应用程序会重命名文件,表明它即将被写入。如果用户的应用程序需要写入,它可以检查文件是否被重命名,并等待文件名恢复为可写名称。

这是我将如何攻击此规范的草图。祝你好运。

于 2012-04-18T04:21:43.923 回答