Member 11727674 Ответов: 1

Восстановление базы данных sqlite на языке C#


Я запрограммировал приложение c#, которое может работать на любом другом компьютере, поэтому я использовал базу данных sqlite.Я хочу резервного копирования и восстановления данных в этом приложении.для резервного копирования это нормально.Я использую ниже код:
private void button1_Click(object sender, EventArgs e)        
{   
    using (var source = new SQLiteConnection("Data Source=bazarganidb.db;version=3"))
    using (var destination = new SQLiteConnection("Data Source=" + textBox1.Text 
        + "/" + DateTime.Now.ToString("yyyyMMdd") + "backup.db"))
    {
        source.Open();
        destination.Open();
        source.BackupDatabase(destination, "main", "main", -1, null, 0);
    }
}

Но я ничего не знаю о восстановлении.как я могу восстановить резервную копию базы данных wichi? Я много искал, но безрезультатно.


Я добавил ниже код для удаления файла sqlite befor и копирования новой базы данных, которая находится в диске d.но когда я нажимаю кнопку, ничего не происходит и нет ошибки или исключения.но если я копирую файл в другую папку excep debug, каждый thinng в порядке.но моя первая база данных находится в папке debug, и она должна быть изменена отсюда

try
            {
               string FileToReplace = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(
 System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase), "bazarganidb.db");
                File.Delete(FileToReplace);
                string OriginalFile =@"D:\bazarganidb.db";
                
                
                //string FileToReplace = @"E:\BazarganiProj2\BazarganiProj\bin\Debug\bazarganidb.db";

                if(File.Exists(FileToReplace))
                File.Delete(FileToReplace);
                File.Copy(OriginalFile, FileToReplace,true);
               }
            catch (Exception k)
            {
                Console.WriteLine(k);
            }


Что я уже пробовал:

я много искал но безрезультатно

1 Ответов

Рейтинг:
4

Graeme_Grant

SQLITE-это однопользовательская локальная файловая БД, в отличие от многопользовательских серверных систем БД, таких как MySql, Sql Server и т. д... она гораздо менее ограничительна.

Итак, если это полная резервная копия/восстановление, просто переименуйте в резервную копию и удалите & переименуйте в восстановление.

ОБНОВЛЕНИЕ: Вот краткий пример того, как это сделать:

class Program
{
    private static readonly string filePath = Environment.CurrentDirectory;

    static void Main(string[] args)
    {
        var filename = "mock.db";
        var bkupFilename = Path.GetFileNameWithoutExtension(filename) + ".bak";

        CreateDB(filePath, filename);

        BackupDB(filePath, filename, bkupFilename);
        RestoreDB(filePath, bkupFilename, filename, true);
    }

    private static void RestoreDB(string filePath, string srcFilename, string destFileName, bool IsCopy = false)
    {
        var srcfile = Path.Combine(filePath, srcFilename);
        var destfile = Path.Combine(filePath, destFileName);

        if (File.Exists(destfile)) File.Delete(destfile);

        if (IsCopy)
            BackupDB(filePath, srcFilename, destFileName);
        else
            File.Move(srcfile, destfile);
    }

    private static void BackupDB(string filePath, string srcFilename, string destFileName)
    {
        var srcfile = Path.Combine(filePath, srcFilename);
        var destfile = Path.Combine(filePath, destFileName);

        if (File.Exists(destfile)) File.Delete(destfile);

        File.Copy(srcfile, destfile);
    }

    private static void CreateDB(string filePath, string filename)
    {
        var fullfile = Path.Combine(filePath, filename);
        if (File.Exists(fullfile)) File.Delete(fullfile);

        File.WriteAllText(fullfile, "this is the dummy data");
    }
}


Member 11727674

спасибо из-за ваше внимание.Но файл sqlite находится в папке bin/Debug. Могу ли я удалить его и скопировать новую резервную копию?

Graeme_Grant

Папка Bin\Debug - это папка запущенного приложения. Да, вы можете! :)

Member 11727674

спасибо, но я не знаю, почему, когда я удаляю и копирую резервную копию в папку отладки, ничего не происходит, и это только для папки отладки, у нее нет никаких проблем с другими папками.

Graeme_Grant

Обновите вопрос с помощью нового кода, чтобы мы могли видеть.

Member 11727674

Я его обновил.

Graeme_Grant

И я тоже. ;)

Просто убедитесь, что вы правильно закрыли БД, прежде чем пытаться скопировать/переместить/удалить, иначе будут вызваны исключения.

Member 11727674

теперь у меня есть еще одна проблема :( я получил исключение, формат URI не поддерживается.

Graeme_Grant

Не понимаю. Код был протестирован и работает до публикации.

Rafath adil

не могли бы вы поделиться своим решением? я работаю над приложением восстановления и резервного копирования sqlite на основе wpf, у меня нет никаких знаний о sql lite, как мне удается получить список всех баз данных sqlite?

Graeme_Grant

База данных SQLite - это один файл. Подробнее читайте на сайте Официальный SQLite[^]