使用SaveFileDialog备份SQLite数据库?

时间:2018-09-15 19:21:15

标签: c# .net wpf sqlite

我正在遵循此处提供的指导:

Sqlite Online Backup Using System.Data.Sqlite

它按预期运行,但是我想将BackupDb.db文件传递到SaveFileDialog,以便用户可以将文件保存在应用程序文件夹之外,最好保存在外部驱动器上。我只是想不通。

这是我到目前为止所拥有的:

$PATH

我知道我错过了一步,但是我不确定要走哪一步。我将ofd1变量定义为打开SaveFileDialog,并通过of1.ShowDialog()告诉它打开。但我无法将“主要”或“目的地”传递到SaveFileDialog中,因为SQLite没有用于显示对话框的定义。

我正在尝试使用以下方法获取文件的路径:

git-frob

但是我收到一个异常消息,说明我没有对该目录的读取权限。

因此,我切换到尝试此方法,但不确定如何正确使用它。它指向基本目录,但是在bin \ debug中找不到任何内容:

git-sh-setup

这最终就是答案,我包括了btn_backup_db_Click的所有内容:

private void btn_backup_db_Click(object sender, RoutedEventArgs e)
    {
        var ofd1 = new Microsoft.Win32.SaveFileDialog();
        using (var source = new SQLiteConnection("Data Source=database.db; Version=3;"))
        using (var destination = new SQLiteConnection("Data Source=BackupDb.db; Version=3;"))
        {
            source.Open();
            destination.Open();
            source.BackupDatabase(destination, "main", "main", -1, null, 0);
            //Microsoft.Win32.SaveFileDialog saveFileDialog;
            ofd1.ShowDialog();
        }

非常感谢大家!

1 个答案:

答案 0 :(得分:0)

SaveFileDialog类仅是一个实用程序,可让用户选择他要保存文件的位置(以路径形式)。

总而言之,您需要在使用sqlite进行任何操作之前显示文件对话框。找到路径后,您需要构建后连接字符串。

var ofd1 = new SaveFileDialog();
// customize file dialog properties here

if (ofd1.ShowDialog() == true)
{
    var path = Path.GetFullPath(ofd1.FileName);
    var destinationCnx = "Data Source=" + path + "; Version=3;"

    // do sqlite stuff here
}