Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.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# 如何将数据库备份上载到FTP服务器_C#_Sql_Deflatestream - Fatal编程技术网

C# 如何将数据库备份上载到FTP服务器

C# 如何将数据库备份上载到FTP服务器,c#,sql,deflatestream,C#,Sql,Deflatestream,在数据库备份项目的末尾,我遇到了一个问题,我输入的Deflate压缩似乎找不到我保存备份的路径。由于默认备份位置(此处使用)位于网络驱动器上,是否需要执行其他操作以确保通过Deflate找到路径?现在我得到System.IO.DirectoryNotFoundException:'无法找到路径的一部分。该工具的目的是能够放入您想要访问的任何服务器,获取可用数据库的列表,然后选择您想要备份的数据库 我以前在本地遇到过这个问题,但我所要做的就是给SQLserver文件夹适当的权限 using (Sq

在数据库备份项目的末尾,我遇到了一个问题,我输入的Deflate压缩似乎找不到我保存备份的路径。由于默认备份位置(此处使用)位于网络驱动器上,是否需要执行其他操作以确保通过Deflate找到路径?现在我得到System.IO.DirectoryNotFoundException:'无法找到路径的一部分。该工具的目的是能够放入您想要访问的任何服务器,获取可用数据库的列表,然后选择您想要备份的数据库

我以前在本地遇到过这个问题,但我所要做的就是给SQLserver文件夹适当的权限

using (SqlConnection newConn = new SqlConnection(connString))
        using (SqlCommand sqlCmd = new SqlCommand(query, newConn))
        {
            newConn.Open();
            value = sqlCmd.ExecuteScalar();
            canCompress = !(value == null || Convert.ToInt32(value) == 0);

            //----------------------------------
            //SQL Commands to run backup process
            //----------------------------------
            Interface.WriteLine("Creating backup");               
            if (canCompress)
            {
                sqlCmd.CommandText = "BACKUP DATABASE [" + connBuilder.InitialCatalog + "] "
                                    + "TO DISK = '" + backupFile + "' "
                                    + "WITH COPY_ONLY, COMPRESSION, NOFORMAT, NOINIT, "
                                    + "NAME = '" + backupName + "', "
                                    + "SKIP, REWIND, NOUNLOAD, STATS = 10";
                sqlCmd.ExecuteNonQuery();
            }
            else
            {
                sqlCmd.CommandText = "BACKUP DATABASE [" + connBuilder.InitialCatalog + "] "
                                    + "TO DISK = '" + backupFile + "' "
                                    + "WITH COPY_ONLY, NOFORMAT, NOINIT, "
                                    + "NAME = '" + backupName + "', "
                                    + "SKIP, REWIND, NOUNLOAD, STATS = 10";
                sqlCmd.ExecuteNonQuery();
            }

            //----------------------------------
            //Grab Backup File
            //----------------------------------
            query = "SELECT physical_device_name "
                    + "FROM msdb.dbo.backupset b "
                    + "JOIN msdb.dbo.backupmediafamily m ON b.media_set_id = m.media_set_id "
                    + "WHERE database_name = '" + connBuilder.InitialCatalog + "' "
                    + "ORDER BY backup_finish_date DESC ";

            using (SqlConnection connection = new SqlConnection(connString))
            using (SqlCommand cmd = new SqlCommand(query, connection))
            {
                connection.Open();
                value = cmd.ExecuteScalar();
                if (value != null)
                    backupFile = (string)value;
                else
                    throw new Exception("Unable to find backup file.");
            }

            //Set which files should be uploaded.
            if (canCompress)
            {
                fileToUpload = backupFile;
            }
            else
            {
                fileToUpload = Deflate.CompressFile(backupFile); //Point of error message
                File.Delete(backupFile);
            }

            return fileToUpload;
        }


static class Deflate
{
        public static string CompressFile(string sourcePath, string destPath = null)
        {
            if (destPath == null)
                destPath = Path.Combine(Path.GetDirectoryName(sourcePath), Path.GetFileNameWithoutExtension(sourcePath) + ".cmp");

            using (FileStream originalFileStream = File.OpenRead(sourcePath))
            using (FileStream compressedFileStream = File.Create(destPath))
            using (DeflateStream compressionStream = new 
    DeflateStream(compressedFileStream, CompressionMode.Compress))
     {
          originalFileStream.CopyTo(compressionStream);
          compressedFileStream.Flush();
      }

            FileInfo sourceInfo = new FileInfo(sourcePath); //Remove the .bak extension on compression?
            FileInfo destInfo = new FileInfo(destPath); //Remove the .bak extension on compression?
            Console.WriteLine("Compressed {0} from {1} to {2} bytes.", Path.GetFileName(sourcePath), sourcePath.Length, destInfo.Length);
            return destPath;
        }
 }

进行完整备份的最简单方法是取消数据库的连接,并复制mdf和ldf文件。然后重新连接数据库。任何人都可以做,而不仅仅是管理员。然后,您可以在需要时附加副本。我建议为此使用SMO。您应该记住,默认备份路径可由SQL Server进程访问,而其他用户通常不可访问。执行完全备份的最简单方法是取消数据库连接并复制mdf和ldf文件。然后重新连接数据库。任何人都可以做,而不仅仅是管理员。然后,您可以在需要时附加副本。我建议为此使用SMO。您应该记住,默认备份路径可由SQL Server进程访问,而其他用户通常无法访问。