在数据库路径很长时为备份或还原操作指定的数据库名称无效

时间:2015-02-07 14:25:11

标签: c# sql-server-2012

我有一个长路径的数据库:

C:\\Users\\UserName\\AppData\\Local\\Apps\\2.0\\ZV0DG5JM.3OH\\XQ31WEZB.OKA\\camman.exe_af50f6b9afda55f2_0001.0005_none_2c544a12b9bb2c09\\CameraManDB.mdf

我使用以下代码进行备份:

public void BackupDatabase(string filePath, string DbPath)
{
    using (CameraManDBEntities dbEntities = new CameraManDBEntities())
    {
        string backupQuery = @"BACKUP DATABASE @DbPath TO DISK = N'{0}'";
        backupQuery = string.Format(backupQuery, filePath);

        dbEntities.Database.SqlQuery<object>(backupQuery, new SqlParameter("DbPath", DbPath)).ToList().FirstOrDefault();
    }
}

当我调用以下方法时:

BackupDatabase(BackUpFileName, @"C:\Users\Mahmood\AppData\Local\Apps\2.0\ZV0DG5JM.3OH\XQ31WEZB.OKA\camman.exe_af50f6b9afda55f2_0001.0005_none_2c544a12b9bb2c09" + "\\CameraManDB.mdf");

它抛出了这个异常:

  

无效的数据库名称&#39; C:\ Users \ Mahmood \ AppData \ Local \ Apps \ 2.0 \ ZV0DG5JM.3OH \ XQ31WEZB.OKA \ camman.exe_af50f6b9afda55f2_0001.0005_none_2c544a12b9bb2c09 \ CameraManDB.mdf&#39;为备份或恢复操作指定。\ r \ nBACKUP DATABASE异常终止。

我认为这很简单,但我找不到任何关于长标识符的明显解决方案。

感谢您的指导!

1 个答案:

答案 0 :(得分:1)

您收到错误是因为您在参数@DbPath中传递了数据库的物理路径,但在BACKUP中您指定的位置使用了该参数数据库名称。这个数据库显然不存在,因此错误。

您需要按如下方式进行更改:

public void BackupDatabase(string filePath, string dbName)
{
    using (CameraManDBEntities dbEntities = new CameraManDBEntities())
    {
        string backupQuery = @"BACKUP DATABASE @DbName TO DISK = N'{0}'";
        backupQuery = string.Format(backupQuery, filePath);

        dbEntities.Database.SqlQuery<object>(backupQuery,
            new SqlParameter("DbName", dbName)).ToList().FirstOrDefault();
    }
}

BackupDatabase(BackUpFileName, "CameraManDB");

我还要将路径作为参数而不是动态SQL,即:

BACKUP DATABASE @DbName TO DISK = @FilePath