2016-08-31 4 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}' С INIT, NOUNLOAD, NOSKIP, STATS = 10 , NOFORMAT ", DbBackupPath, YourDataFile);' научитесь правильно использовать string.Formatting {} 'и выберите более короткий путь к файлу или обновите проект, чтобы использовать .net' 4.6.x' – MethodMan

+0

Я изменил текст команды и обновил проект до .NET 4.6.1. но все еще получаю эту ошибку. Я не знаю, как сократить путь, потому что, когда я публикую и запускаю его для установки, он не предлагает мне выбрать путь установки:/ любое другое сообщение с базой данных Я использую среду VS dataset (добавьте запрос к Table адаптер), и все это работает, я даже пытаюсь сделать хранимые процедуры делать резервную копию, а не называть ее, но я думаю, что сделал неправильные синтаксисы: –

ответ

0

При выборе select physical_name from sys.database_files, вы получите кучу имен файлов. Синтаксис для BACKUP DATABASE требует, после DATABASE, а не имени файла, а имени базы данных.

Ваши имена файлов включают в себя пути, и это приводит к тому, что полный путь будет настолько длинным, что его нельзя интерпретировать как имя базы данных. Если путь был меньше, вы могли бы получить ошибку, чтобы база данных с этим именем не была найдена. Это скажет вам более прямо, что вы делаете неправильно.

У вас должно быть имя базы данных уже из вашей строки подключения.

+0

Решите мою проблему. Я устанавливаю «Установщик Visual Studio» и добавляю Setup Project в мое решение. В этом проекте я сделал установщик, где я могу выбрать собственный путь установки моего основного приложения. Теперь путь меньше 128 символов, и все работает правильно. Я не знаю, как и почему, но я счастлив: D –

Смежные вопросы