2016-08-31 290 views
0

我有一個問題。我嘗試創建本地數據庫的數據庫備份。以...開頭的標識符太長。最大長度是128

當我在VS中啓動程序時,一切正常,因爲數據庫的路徑少於128個字符。但是,當我發佈並安裝應用程序時,路徑長度超過128個字符,並且出現該錯誤。

在網上我發現了兩個解決方案:

  1. 要使用單引號
  2. 設置:SET QUOTED_IDENTIFIER OFF & SET ANSI_NULLS ON

但我儘量取其組合,我無法得到它的權利。

任何人都可以告訴我如何得到它的權利?

我的代碼:

internal void CreateDbBackup(string DbBackupPath) 
{ 
    SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString); 

    SqlCommand GetDataFile = new SqlCommand(); 
    GetDataFile.Connection = con; 
    GetDataFile.CommandText = "select physical_name from sys.database_files where type = 0"; 

    con.Open(); 
    string YourDataFile = (string)GetDataFile.ExecuteScalar(); 
    con.Close(); 

    SqlCommand cmd = con.CreateCommand(); 
    cmd.CommandText = string.Format(@"BACKUP DATABASE [" + YourDataFile + "] TO DISK = N'{0}' WITH INIT , NOUNLOAD , NOSKIP , STATS = 10, NOFORMAT", DbBackupPath); 

    con.Open(); 
    cmd.ExecuteNonQuery(); 
    con.Close(); 
} 
+3

您可以將路徑縮短到128個字符或更少嗎?這似乎是最簡單的解決方案。 – Tim

+0

將您的'cmd.CommandText' =更改爲以下內容 cmd.CommandText = string.Format(@「BACKUP DATABASE [{1}] TO DISK = N'{0}'WITH INIT,NOUNLOAD,NOSKIP,STATS = 10 ,NOFORMAT「,DbBackupPath,YourDataFile);'學會正確使用string.Formatting {}'並選擇一個較短的文件路徑或升級項目以使用.net'4.6.x' – MethodMan

+0

我更改了命令文本,並將項目升級到.NET 4.6.1。但仍然有這個錯誤。 我不知道如何縮短路徑,因爲當我發佈並運行它進行安裝時,它不會提供我選擇安裝路徑:/ 與數據庫隔開的其他通信我使用VS數據集環境(將查詢添加到表格適配器),這一切都工作,我甚至嘗試使存儲過程做備份,而不是調用它,但我認爲我做了錯誤的sintaks: –

回答

0

當您選擇select physical_name from sys.database_files,你會得到一堆文件名。 BACKUP DATABASE的語法要求在DATABASE之後,不是文件名,而是數據庫名稱。

您的文件名包含路徑,並且導致總路徑太長以至於無法將其解釋爲數據庫名稱。如果路徑不夠長,則會發生錯誤,即沒有找到具有該名稱的數據庫。這會更直接地告訴你你做錯了什麼。

您應該從連接字符串中獲得數據庫名稱。

+0

解決我的問題。我安裝「Visual Studio安裝程序」,並將安裝項目添加到我的解決方案。通過這個項目,我製作了安裝程序,可以選擇我的主應用程序的自定義安裝路徑。現在路徑少於128個字符,並且一切正常。 我不知道如何,爲什麼,但我很高興:D –