Reputation: 35
I have a console app for backup my SQL Server database.
I used this code:
static void CreateBackup(string connectionString, string databaseName, string backupFilePath)
{
backupFilePath = backupFilePath + "\\" + databaseName + ".bak";
backupFilePath = @"" + backupFilePath;
var backupCommand = "BACKUP DATABASE @databaseName TO DISK = @backupFilePath";
using (var conn = new SqlConnection(connectionString))
using (var cmd = new SqlCommand(backupCommand, conn))
{
conn.Open();
cmd.Parameters.AddWithValue("@databaseName", databaseName);
cmd.Parameters.AddWithValue("@backupFilePath", backupFilePath);
cmd.ExecuteNonQuery();
}
}
When I start the app, I always get the same error:
System.Data.SqlClient.SqlException (0x80131904): The parameterized query '(@databaseName nvarchar(4000),@backupFilePath nvarchar(5))BACKUP' expects the parameter '@databaseName', which was not supplied.
How can I fix this?
Upvotes: 2
Views: 94
Reputation: 21
The database name in BACKUP DATABASE
is SYS Name, and cannot be a string variable, you can build the backupCommand to be:
var backupCommand = "DECLARE @cmd varchar(max) = 'BACKUP DATABASE ' + @databaseName + ' TO DISK = ''' + @backupFilePath + ''' '
EXEC (@cmd)"
Upvotes: 2