Сегодня я использую SQLite и отправляю файл базы данных вместе с проектом.
Однако я хочу, чтобы база данных создавалась при первом запуске программного обеспечения пользователем.
Есть ли способ скопировать код, необходимый для создания базы данных на основе существующей базы данных? Проблема заключается в том, что когда пользователь загружает новую версию, он может быть обманут в копировании своей последней базы данных и потерять данные. Мне нужен хороший способ проверить версию базы данных и изменить ее, если мне нужны новые столбцы или таблицы и т. Д. Или, если она вообще не существует, создать новую базу данных?
Я знаю, что, возможно, смогу создать код для создания базы данных с самого начала, но я хочу, чтобы он основывался на существующей базе данных, которую я создал с помощью графического интерфейса.
Ответил. Конечный код:
//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();
}