c# - 寻求有关在同一文件中工作的多个用户的设计建议

标签 c# ms-access serialization sql-server-express

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

规范

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

各种最终用户需要能够同时连接到文件并对其进行编辑。例如,Billy Bob 正在研究名为 US321 的道路,而 Rupert 正在研究 I40。每条道路的模型都在同一个文件中。最终用户可以“声明”任何道路名称,其中只有声明者可以编辑给定的道路。 Rupert 不能编辑 US321,而 Billy Bob 声称,但 Rupert 可以阅读 US321 作为引用。用户完成道路数据编辑后,他可以解除声明,其他人可以编辑它。

序列化的限制?

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

我正在考虑的解决方案

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

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

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

[编辑]

结论

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

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

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

  • 保罗

最佳答案

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

如果您使用的是 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

关于c# - 寻求有关在同一文件中工作的多个用户的设计建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10201298/

相关文章:

vba - 从 Access 发送电子邮件

转义撇号中的PHP Mysql更新序列化数组

C#上传视频到Youtube,不提示用户登录: Youtube API V3

c# - Byte[] 数组转字符串

java - 连接Access数据库时如何避免 "Out Of Memory"错误?

python - django Serializer 对象没有属性

c++ - 结构到字节

c# - 为什么我不能从我的列表中抽取 1 个以上的敌人?

c# - 两个已知标签之间可能出现不止一次的子字符串的正则表达式

ms-access - 从另一个子表单重新查询子表单,问题