繁体   English   中英

是否可以防止数据库文件在外部未在c#中打开/删除的情况下被删除/修改?

[英]Is it possible to prevent database files from being deleted/modified externally without having it opened in c#?

情况:

目前,我正在从我的前身调试可处理sqlite数据库(.db3文件格式)的代码。 在软件中,您可以加载一个或多个数据库。 这些数据库上的常规信息(获取所有表名,获取所有列名等)直接从文件中处理,但是对于实际数据信息,数据库被复制到内存数据库中,从中查询数据。 因此,在收集了初始信息并将所有数据保存到内存数据库之后,不再使用实际的文件。

但是,如果用户从列表中添加/删除数据库,它们仍将显示在GUI上并被引用。

问题:

所有这些都会导致以下问题:如果用户修改/删除已加载数据库的文件(之所以可行,因为我们没有与文件的开放连接),该软件的内部数据库池与实际文件列表。 结果,在这种情况下,一旦使用的数据库列表被更新,我们就具有不确定的行为。

可能的解决方案(?)

  • 也许最好的办法是重新编写完整的代码,并将所有内容保留在内存数据库中(GUI表示,数据,数据库信息等)。 在这种情况下,我完全不需要担心文件。 但是,这将意味着大量的返工,并且……没有时间这样做^^
  • 只要打开所有文件的sqlite连接并保持打开状态,只要相应的内存数据库被列为“已使用”(我认为这不是一个好选择)。
  • 找到一种方法来防止在不打开文件的情况下删除/修改文件。 我不确定是否/如何可能,到目前为止,我已经读到的是需要以编程方式更改文件的可访问性权限,这会导致涉及Windows中用户权限的多个问题...

问题:此问题还有其他方法/建议吗? 对我而言,最好/最简单的方法是找到一种方法来防止文件列表被修改。 到目前为止,我还没有找到一种适合该方法的好的解决方案。

保持与SQLite数据库文件的连接打开将防止Windows删除它。

一个糟糕但快速的解决方案可能是允许原始代码将文件读取到内存,然后获取与该文件的新连接。 您可以保持此连接打开而无需执行任何操作,以防止其被删除。 一旦使用该数据集完成了应用程序用户的使用,就可以处置该连接,从而允许再次删除该文件。

建议这样做-这是一个肮脏的解决方法。 但是,它可能会给您更多时间来适当地重构代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM