Я следую инструкциям, приведенным здесь:
Sqlite Online Backup с использованием System.Data.Sqlite
И это работает, как я ожидал, но я бы хотел передать файл BackupDb.db в SaveFileDialog, чтобы пользователь мог сохранить файл вне папки приложений, предпочтительно на внешнем диске. Я просто не могу понять это.
Это то, что я имею до сих пор:
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();
}
Я знаю, что пропускаю шаг, но я не уверен, какой шаг. У меня есть переменная ofd1, определенная как открывающая SaveFileDialog, и я говорю, чтобы она открывалась с of1.ShowDialog (); но я не могу передать "main" или "destination" в SaveFileDialog, потому что SQLite не имеет определения для отображения диалога.
Я пытаюсь получить путь к файлу, используя:
private string MyDirectory()
{
return Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
}
Но я получаю исключение, утверждающее, что у меня нет доступа на чтение к каталогу.
Итак, я переключился на это, но я не уверен, как правильно его использовать. Он указывает на базовый каталог, но не может найти ничего в bin \ debug:
var dir = AppDomain.CurrentDomain.BaseDirectory;
В итоге это был ответ, я включил все из btn_backup_db_Click:
private void btn_backup_db_Click(object sender, RoutedEventArgs e)
{
var ofd1 = new Microsoft.Win32.SaveFileDialog();
ofd1.Filter = "Database Files (*.db)|*.db";
ofd1.FileName = "database";
// customize file dialog properties here
if (ofd1.ShowDialog() == true)
{
var path = Path.GetFullPath(ofd1.FileName);
var destinationCnx = "Data Source=" + path + "; Version=3;";
using (var source = new SQLiteConnection("Data Source=database.db; Version=3;"))
using (var destination = new SQLiteConnection(destinationCnx))
{
source.Open();
destination.Open();
source.BackupDatabase(destination, "main", "main", -1, null, 0);
}
}
else
{
MessageBox.Show("Error");
}
}
Большое спасибо всем!