Вместо передачи двух отдельных параметров, и пытается объединить их в сценарии SQL, просто пройти полный путь как единственный параметр. Вы можете создать правильный путь из папки и файла с System.IO.Path.Combine:
var folder=textBox_BackupDatabaseLocation.Text;
var filename = textBox_BackupDatabaseName.Text;
var fullPath=Path.Combine(folder,filename);
//...
var cmd= new SqlCommand("BACKUP DATABASE BillingSoftware TO DISK = @fullPath",con);
cmd.Parameters.AddWithValue("@fullPath", fullPath);
cmd.ExecuteNonQuery();
Path.Combine
генерирует правильный путь к файлу, даже если есть, например, задние или недостающие косые в имени каталога, что позволит сделать конкатенации перерыва.
Другой вариант: избегать операторов SQL и использовать библиотеку SQL Server Management Objects. В итоге SMO генерирует команды SQL, но предоставляет все функциональные возможности в API, которые должен сделать поиск и определение дополнительных параметров очень легко.
Я говорю должен, потому что документация не соответствует стандартам SQL Server. class reference есть, но примеры ... Проверьте Backing Up and Restoring Databases and Transaction Logs. Возможно, для этого есть более качественная страница SO Documentation.
Во всяком случае, пример кода можно обобщить следующим образом:
//Local server
var srv = new Server();
var db = srv.Databases["AdventureWorks2012"];
var bk = new Backup
{
Action = BackupActionType.Database,
BackupSetDescription = "Full backup of Adventureworks2012",
BackupSetName = "AdventureWorks2012 Backup",
Database = "AdventureWorks2012",
Checksum = true
};
var bdi = new BackupDeviceItem(fullDestinationPath,DeviceType.File);
bk.Devices.Add(bdi);
bk.SqlBackup(srv);
Преимущество заключается в том, что вы можете настроить таргетинг на несколько баз данных, например, в цикле, получать уведомления и т.д.
UPDATE
прогресс
Класс Path содержит методы, которые могут использоваться для проверки путей, например, Path.IsPathRooted может использоваться для проверки того, является ли путь полным путем. Другие классы System.IO
могут использоваться для проверки, например Directory.Exists проверьте, существует ли папка.
Вы пытаетесь использовать параметры, как если бы они были переменными подстановки строки. Это не так.* Предполагая, что 'BACKUP DATABASE' принимает параметры, просто передайте полный путь как один параметр, то есть' TO DISK = @ fullPath' –
Почему вы не просто передаете полный путь как единственный параметр? Вы можете построить правильное значение с помощью 'Path.Combine()' –