我正在部署一个使用vs 2008 0n XP sp3构建的winform应用程序.
我创建了一个空模式的数据库,我将其放在项目的根文件夹中,在我选择的属性中选择Build Action:Embedded Resources和copy to Output目录:始终复制.现在,我没有在app.config connectionString部分中使用connectionstring,而是在appSetting中输入一个条目:key =“database”; value =“mydb.db; Version = 3”.
所以要创建我使用的connectionString:
sqliteConnection con = new sqliteConnection("Data Source=" + Path.Combine(Application.StartupPath,ConfigurationManager.AppSettings["database"]));
一切正常,我用安装项目打包应用程序.现在我安装了应用程序无法找到数据库,我不得不将数据库复制到安装项目中的应用程序文件夹,以使其工作.
我认为db应该是应用程序DLL因为副本总是.但我无法访问它.所以我究竟做错了什么?
我怀疑我应该刚刚连接到根db意味着不使用Application.StartupPath
嵌入式资源意味着数据库嵌入到您的dll中.在这种情况下,复制到输出目录设置不适用于构建操作:内容.
嵌入数据库后,您基本上必须在首次使用时取消嵌入.为此,请将其从程序集中读出并将其存储到文件中.
class EmbeddedResourceTest { public static void test() { string path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),"Test.db"); using(var resourceStream = typeof(EmbeddedResourceTest).Assembly.GetManifestResourceStream("Test.db")) { using(var fileStream = File.OpenWrite(path)) { copyStream(resourceStream,fileStream); } } // Now access database using 'path' } public static void copyStream(Stream inputStream,Stream outputStream) { copyStream(inputStream,outputStream,4096); } public static void copyStream(Stream inputStream,Stream outputStream,int bufferLength) { var buffer = new byte[bufferLength]; int bytesRead; while ((bytesRead = inputStream.Read(buffer,bufferLength)) > 0) { outputStream.Write(buffer,bytesRead); } } }
原文地址:https://www.jb51.cc/sqlite/197903.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。