2017-02-19 61 views
0

我已經創建了一個WPF 4.5 .NET應用程序,它具有數據庫備份功能。在調試時,函數和備份工作正常,但是當我將它發佈到ClickOnce中並將其安裝到目標機器中時,除備份之外的所有工作都將正常工作,因爲ClickOnce模糊了應用程序文件夾位置,因此備份語句運行時間過長!有沒有辦法讓備份聲明更短?這裏是我的代碼和錯誤,我得到: 代碼:在ClickOnce中備份localDB數據庫

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(); 
     } 
    } 
) 

**************異常文本**************

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中設置,但不能插入或更新數據庫。你可以發現一些人通過interent搜索有這個困難。我想當我們設置|數據目錄|在connectionString中,數據庫扮演只讀數據文件的角色,如| Data Directory |的細微差別。

取而代之的是| Data Directory |,我選擇了比較明顯的路徑,這個路徑總是表示同一個地方(目錄)。

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

以上環境變量總是表示C:\用戶\阿布巴卡爾\應用程序數據\漫遊目錄。

對於這種情況,您需要首先創建具有上述路徑的whdb.mdf數據庫文件。

而且進一步,你可以創建自己的額外的目錄像ConnectionString中如爲MyBackup,

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

我找不到微軟如何的正式文件|資料目錄|作品但失敗。瞭解|數據目錄|將是你的鑰匙,否則,有像我的情況下的替代方式。 我的情況也是WPF,ClickOnce的,SQL數據庫(它的LocalDB,但我改變了,因爲遠程網絡的正常SQL數據庫)問題解決了

+0

不工作!問題仍然存在,因爲我必須在備份語句中使用Application.StartupPath!連接字符串很好 – user7586828

+0

我知道將localDB附加到項目和發佈的過程。也許,您需要了解|數據目錄|。祝你好運 ! –

0

通過在連接字符串中添加Initial catalog=whdb,然後用剛更換的完整路徑Application.StartupPath + @"\whdb.mdf"數據庫名稱「whdb」!