建立连接后如何在c#中备份数据库
我已经编写了访问和显示给定服务器中所有数据库的代码。现在,我正在尝试实际执行备份过程,并将文件保存到我的桌面上。但是,当它到达建立连接后如何在c#中备份数据库,c#,sql,smo,C#,Sql,Smo,我已经编写了访问和显示给定服务器中所有数据库的代码。现在,我正在尝试实际执行备份过程,并将文件保存到我的桌面上。但是,当它到达SQLBackup()时,我得到一个 SqlException:无法打开备份设备 我已尝试将文件路径更改为其他位置。将文件类型指定为.bak。将其更改为服务器名称本身,但我一直收到相同的错误 public static void Backup(string dbName, string connString) { if (string.Is
SQLBackup()
时,我得到一个
SqlException:无法打开备份设备
我已尝试将文件路径更改为其他位置。将文件类型指定为.bak
。将其更改为服务器名称本身,但我一直收到相同的错误
public static void Backup(string dbName, string connString)
{
if (string.IsNullOrEmpty(dbName)) //check if a database name has been entered
{
WriteLine("Database name cannot be blank. Enter a Database to back up");
}
else
{
SqlConnection objconnection = new SqlConnection(connString);
ServerConnection con = new ServerConnection(objconnection.DataSource.ToString());
Server server = new Server(con);
Backup source = new Backup();
source.Action = BackupActionType.Database;
source.Database = dbName;
BackupDeviceItem destination = new BackupDeviceItem(@"C:\Users\me\Desktop\", DeviceType.File);
source.Devices.Add(destination);
source.SqlBackup(server);
}
}
如果运行正常,我的桌面上应该有数据库的备份文件。问题在于备份设备项目中的第一个参数。将其更改为dbname(或任何其他名称)修复了该问题。该问题与backupdeviceitem中的第一个参数有关。将其更改为dbname(或任何其他名称)修复了该问题。可能是因为您没有指定文件,而只是指定文件夹作为保存路径。最好只是解除附加数据库并复制MDF文件,然后重新附加。@jdweng-为什么?如果您这样做,您还需要LDF来进行恢复。SQL用户有权访问文件系统吗?错误表明不需要。Deattach不需要任何选项,也不需要管理员权限。我们在特权归档方面遇到了很多问题,发现解除附加/附加要容易得多。您可以选择归档日志并重新连接。也快得多。存档需要时间。可能是因为您没有指定一个文件,而只是指定一个文件夹作为保存路径。最好只是解除附加数据库并复制MDF文件,然后重新附加。@jdweng-为什么?如果您这样做,您还需要LDF来进行恢复。SQL用户有权访问文件系统吗?错误表明不需要。Deattach不需要任何选项,也不需要管理员权限。我们在特权归档方面遇到了很多问题,发现解除附加/附加要容易得多。您可以选择归档日志并重新连接。也快得多。归档需要时间。