我正处于编写桌面应用程序以供多个用户使用的最早阶段。我正在寻找有关最佳方法的建议。
我会将我的模型保存在一个通常用于映射网络驱动器的文件中。 (它用于设计道路和其他线性特征,如铁路和溪流。)
各种最终用户需要能够同时连接和编辑文件。例如,比利鲍勃正在开发名为US321的道路,而鲁珀特正在研究I40。每条道路的模型都在同一个文件中。最终用户可以声称"任何道路名称,其中只有索赔人可以编辑给定的道路。鲁比特不能编辑US321,而比利鲍勃声称它,但鲁珀特可以阅读US321作为参考。一旦用户完成道路数据的编辑,他就可以发布索赔,而其他人可以编辑它。
我对序列化的理解非常有限(参见我的个人资料)。但在我看来,对象和序列化文件之间存在一对一的关联。因此,如果我使用序列化来实现这一点,则不可能只声明其中的一部分,也不可能只更新其中的一部分。 (这是正确的吗?如果没有,那么我可以使用序列化,对吗?)
我正在考虑使用SQL Server Express,我对社区的警告,更正或肯定感兴趣。
最终用户不必知道我在后台使用SQL Server Express。 (我甚至会将文件扩展名更改为适合我的应用程序的内容。)我会将道路加载到列表中,并且每条道路都是“可索赔的”#34;。声称道路会在数据库中将其标记为应用程序的其他实例作出相应的反应,有点像是多个人可以同时编辑的共享MS Excel文件,但是(与Excel类似)能够锁定个人工作表。
[编辑]请参阅下面的Micah Armantrout提供的非常丰富的回复。所以现在我想知道使用Microsoft Access作为中介数据库应用程序。
[编辑]
感谢大家提供的有用答案和评论。 Micah的回答非常有用,因为我没有意识到我只限于只有一台服务器控制的文件。虽然它现在很有意义,但我还没有预料到,如果我走了那条路,经过几个小时的努力,我就会搁浅它。
当我第一次读到urbadave的想法时,我认为它是我已经考虑过但不喜欢的东西。但在考虑完之后,这显然是最简单的方法。我只是使用一个目录,就像它是一个文件,但对我的顶级子对象具有用户透明性。但显然有一种吸引力就是将我的整个模型封装到一个文件中。
所以这就是我决定做的事情:从写一个目录开始,就像urbadave建议的那样。然后测试将它放在一个zip目录中并使用ZipPackage类来拔出并插入各个序列化文件(或XML文件 - 我有一天要做的另一个决定)。
答案 0 :(得分:4)
SQL服务器可以满足您的需求,但如果您拥有多个用户,则需要将计算机设置为服务器。 在每台计算机上安装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,我会向您推荐一篇关于哪一个使用的文章
答案 1 :(得分:1)
虽然我可以在工作中访问一个不错的数据库,但我的大多数个人编程都不使用数据库。我过去使用的一个技巧是文件扩展意味着带有意义。在您的情况下,您可以利用文件扩展名来指示声明并控制对主文件的写入。
你是对的,你想要将每个道路对象序列化为它自己的文件。主文件将是包含所有这些单独道路对象的集合对象的序列化。
用户选择并打开这些道路文件。在打开文件之前,用户的应用程序重新命名文件,添加扩展名(可能是用户的ID)。这样,您就可以使用目录扫描来查找声明的和无人认领的文件。
主文件仅在用户在他们正在处理的道路上发布其声明时写入。用户的应用程序打开所有道路文件,使用道路对象组装主对象,然后将此对象序列化为主文件。完成后,用户应用程序会通过重命名来释放用户对道路文件的声明。
在写入主文件之前,用户的应用程序会重命名该文件,表明该文件即将被写入。如果用户应用程序需要写入,它可以检查文件是否已重命名,并等待文件名恢复为可写名称。
这是我将如何攻击此规范的草图。祝你好运。