加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

winforms – 使用嵌入式sqlite部署winform应用程序

发布时间:2020-12-12 19:13:35 所属栏目:百科 来源:网络整理
导读:我正在部署一个使用vs 2008 0n XP sp3构建的winform应用程序. 我创建了一个空模式的数据库,我将其放在项目的根文件夹中,在我选择的属性中选择Build Action:Embedded Resources和Copy to Output目录:始终复制.现在,我没有在app.config connectionString部分
我正在部署一个使用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);
        }
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读