我有一个长路径的数据库:
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异常终止。
我认为这很简单,但我找不到任何关于长标识符的明显解决方案。
感谢您的指导!
答案 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