How to backup Sql Database Programmatically in C#

后端 未结 10 1887
说谎
说谎 2020-12-23 11:48

I want to write a code to backup my Sql Server 2008 Database using C# in .Net 4 FrameWork. Can anyone help in this.

10条回答
  •  我在风中等你
    2020-12-23 12:19

    Works for me:

    public class BackupService
    {
        private readonly string _connectionString;
        private readonly string _backupFolderFullPath;
        private readonly string[] _systemDatabaseNames = { "master", "tempdb", "model", "msdb" };
    
        public BackupService(string connectionString, string backupFolderFullPath)
        {
            _connectionString = connectionString;
            _backupFolderFullPath = backupFolderFullPath;
        }
    
        public void BackupAllUserDatabases()
        {
            foreach (string databaseName in GetAllUserDatabases())
            {
                BackupDatabase(databaseName);
            }
        }
    
        public void BackupDatabase(string databaseName)
        {
            string filePath = BuildBackupPathWithFilename(databaseName);
    
            using (var connection = new SqlConnection(_connectionString))
            {
                var query = String.Format("BACKUP DATABASE [{0}] TO DISK='{1}'", databaseName, filePath);
    
                using (var command = new SqlCommand(query, connection))
                {
                    connection.Open();
                    command.ExecuteNonQuery();
                }
            }
        }
    
        private IEnumerable GetAllUserDatabases()
        {
            var databases = new List();
    
            DataTable databasesTable;
    
            using (var connection = new SqlConnection(_connectionString))
            {
                connection.Open();
    
                databasesTable = connection.GetSchema("Databases");
    
                connection.Close();
            }
    
            foreach (DataRow row in databasesTable.Rows)
            {
                string databaseName = row["database_name"].ToString();
    
                if (_systemDatabaseNames.Contains(databaseName))
                    continue;
    
                databases.Add(databaseName);
            }
    
            return databases;
        }
    
        private string BuildBackupPathWithFilename(string databaseName)
        {
            string filename = string.Format("{0}-{1}.bak", databaseName, DateTime.Now.ToString("yyyy-MM-dd"));
    
            return Path.Combine(_backupFolderFullPath, filename);
        }
    }
    

提交回复
热议问题