SQLite - 即时创建和更改数据库

时间:2010-04-15 16:00:57

标签: c# database sqlite

今天我使用SQLite并向项目发送数据库文件。

但是我希望在用户首次启动软件时创建数据库。

有没有办法复制基于现有数据库创建数据库所需的代码?问题在于,当用户下载新版本时,他可能会被欺骗复制到他的上一个数据库并丢失数据。我想要一个很好的方法来检查数据库的版本并修改它,如果我需要新的列或表等。或者,如果它根本不存在,创建一个新的数据库?

我知道我可以创建从头开始创建数据库的代码,但我希望它基于我用gui创建的现有数据库。

回答。最终代码:

            //Copy the database from the resource
            using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("resourcename"))
            {
                if (stream == null)
                    throw new NullReferenceException("Stream is null. Cannot find the database in the resources");
                FileStream writer = new FileStream(Constants.SqLiteFile, FileMode.Create);
                int Length = 256;
                Byte[] buffer = new Byte[Length];
                int bytesRead = stream.Read(buffer, 0, Length);
                // write the required bytes
                while (bytesRead > 0)
                {
                    writer.Write(buffer, 0, bytesRead);
                    bytesRead = stream.Read(buffer, 0, Length);
                }
                stream.Close();
                writer.Close();
            }

2 个答案:

答案 0 :(得分:1)

嗯......我认为你可以去做两个sqlite数据库之间的同步,我的想法是获取每个数据库的表和字段,并循环它们以查看哪些表和字段在一个而不是另一个。

要开始使用,这些查询对您有用。

-- For getting tables in current db
SELECT name FROM sqlite_master WHERE type = 'table' ORDER BY name;

-- For getting info about a table
PRAGMA table_info('tabla_name');

答案 1 :(得分:0)

听起来你只需要一个位置来保存当前系统的版本。创建一个配置表并拥有一条记录,用于维护创建/更新数据库的任何版本。当他们运行安装程序/升级时,请检查该版本是否存在,以及/或确定了采取的步骤以确定要采取的步骤。