2017-02-19 6 views
0

Я создал приложение WPF 4.5 .NET с функцией резервного копирования базы данных. Функции и резервное копирование отлично работают при отладке, но когда я публикую его в ClickOnce и устанавливаю его на целевую машину, все работает, за исключением того, что резервная копия не будет работать, потому что ClickOnce обфускает местоположение папки приложения, поэтому слишком долго будет работать оператор резервного копирования! Есть ли способ сделать оператор резервного копирования короче? вот мой код и Я получаю ошибку: код:Резервное копирование базы данных localDB в ClickOnce

SaveFileDialog sfd = new SaveFileDialog(); 
string stringCon = @"Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\whdb.mdf;Integrated Security=True"; 
string dbPath = Application.StartupPath + @"\whdb.mdf"; 
if (sfd.ShowDialog() == DialogResult.OK) 
{ 
    using (SqlConnection conn = new SqlConnection(stringCon)) 
    { 
     string backupStmt = string.Format(@"backup database @whdb to disk='{0}' WITH INIT ", sfd.FileName); 
     using (SqlCommand sqlComm = new SqlCommand(backupStmt, conn)) 
     { 
      sqlComm.Parameters.AddWithValue("@whdb", dbPath); 
      conn.Open(); 
      sqlComm.ExecuteNonQuery(); 
      conn.Close(); 
     } 
    } 
) 

************** Exception Text **************

System.Data.SqlClient.SqlException (0x80131904): Invalid database name 'C:\Users\Abubaker\AppData\Local\Apps\2.0\52WR4JTO.12O\D6M4D7OQ.Z3D\sa3a..tion_fef19ab42c2b8f22_0001.0000_9fc10c82bbf23ed2\whdb.mdf' specified for backup or restore operation. 
BACKUP DATABASE is terminating abnormally. 

ответ

0

Файл базы данных whdb.mdf создается другим существующим приложением? И ваше приложение WPF предназначено только для резервного копирования существующей базы данных whdb.mdf?

Я также боролся за дни для такого рода ситуаций. Я попробовал | Каталог данных | и Application.StartupPath и некоторые другие подходы, которые вы нашли.

Однако я, наконец, выбрал этот способ и успешно запустил (опубликовал) мой сервис.

Согласно моему опыту, | Каталог данных | указывает на разные места в зависимости от обстоятельств, другими словами, это не всегда так же. И я мог читать базу данных SQL Select с | Data Directory | установив в connectionString, но не смог вставить или обновить базу данных. Вы можете найти, что некоторые люди испытывают такие трудности, идя в интервенции. Я думаю, когда мы установили | Data Directory | в connectionString, база данных играет роль файла данных только для чтения, например, нюанса | Data Directory |.

Вместо этого | Каталог данных | я выбрал более очевидный путь, который указывает всегда то же место (каталог).

@"Data Source=(LocalDB)\v11.0;AttachDbFilename=" + Environment.GetEnvironmentVariable("APPDATA") + @"\whdb.mdf;Integrated Security=True"; 

Над окружающей среды переменная указывает всегда C: \ Users \ Abubaker \ AppData \ Roaming каталог.

Для этого сценария вам необходимо создать файл базы данных whdb.mdf с указанным выше путем.

А дальше, вы можете создать свой собственный дополнительный каталог как MyBackup с ConnectionString как,

@"Data Source=(LocalDB)\v11.0;AttachDbFilename=" + Environment.GetEnvironmentVariable("APPDATA") + @"\mybackup" + @"\whdb.mdf;Integrated Security=True"; 

Я не мог найти официальный документ от Microsoft, как | Каталог данных | работает, но не удалось. Понимание | Каталог данных | будет вашим ключом, иначе, есть альтернативный способ, как мой случай. Моего случай также WPF, ClickOnce, базы данных SQL (это было LocalDB, но я изменил к нормальным базам данных SQL из-за удаленные сетевой)

+0

нерабочий! проблема все еще существует, потому что я должен использовать Application.StartupPath в операторе резервного копирования! строка подключения в порядке – user7586828

+0

Я знаю процесс, связанный с localDB для проекта и публикации. Возможно, вам нужно понять | Каталог данных |. Удачи ! –

0

решили проблему путем добавления Initial catalog=whdb в строке соединения, а затем заменить полный путь Application.StartupPath + @"\whdb.mdf" только с имя базы данных «whdb»!