我正在编写一个 C# WinForms 应用程序,该应用程序的组件之一是 SQLite 数据库。
如果用户第一次运行该程序,该程序应该在用户的主目录中创建必要的文件夹和文件(即数据库文件)。效果很好。
不过,还需要建立数据库(即需要添加表)。我有一个 SQL 脚本来创建必要的表;但是,它当前存储在解决方案目录中,我不确定这是否是程序实际打包到 .exe 文件中的最佳实践。
每次需要设置数据库时,脚本都是相同的,所以我想可能有几个选项:
让程序从 SQL 脚本中读取并将其应用到数据库(除非有更好的方法,否则首选)
将脚本文件的内容加载到内存中(将其硬编码到string
)并让应用程序以这种方式运行(不推荐,因为未来的版本,需要有一种方法来更新现有的结构,以免删除现有的数据库,所以这种方式可能会变得复杂)
将 SQL 脚本作为程序包或独立文件的一部分包含在内(非常危险,因为用户不应该知道这一点)
那么从“伴随”脚本文件运行 SQL 语句的最佳方法是什么?当程序准备好投入生产时,如何打包所有这些内容?如何确保程序每次需要时都可以访问该文件?
您可以设置要在输出目录中复制的文件。在解决方案资源管理器中选择文件,然后在属性窗口中设置复制到输出目录 https://msdn.microsoft.com/en-us/library/0c6xyb66(v=vs.100).aspx#Anchor_2 to 始终复制。这样,文件将被复制到输出目录中,您可以通过以下方式加载它:
var path = System.IO.Path.Combine(Application.StartupPath, @"Script.txt");
var content = System.IO.File.ReadAllText(path);
如果文件位于解决方案的根目录中,请使用上述文件名。如果该文件位于解决方案中的文件夹中,例如对于 Folder1 中的文件,请使用@"Folder1\Script.txt"
在上面的代码中。
作为另一个选项,您可以将文件添加到Resources.resx
。然后它将包含在资源中,您可以通过以下方式简单地访问它:
var content = Properties.Resources.Script;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)