Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
建立连接后如何在c#中备份数据库_C#_Sql_Smo - Fatal编程技术网

建立连接后如何在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不需要任何选项,也不需要管理员权限。我们在特权归档方面遇到了很多问题,发现解除附加/附加要容易得多。您可以选择归档日志并重新连接。也快得多。归档需要时间。