Chcę napisać kod do tworzenia kopii zapasowej bazy danych Sql Server 2008 przy użyciu C# w .Net 4 FrameWork. Czy ktoś może w tym pomóc?Jak programowo utworzyć kopię zapasową bazy danych Sql w C#
Odpowiedz
Poniższy Link wyjaśnił wszystkie szczegóły dotyczące wykonywania kopii bazy danych SQL Server 2008 przy użyciu C#
kopii zapasowej bazy danych SQL można zrobić za pomocą wielu sposób. Możesz użyć poleceń Sql, jak w drugiej odpowiedzi, lub utworzyć własną klasę do tworzenia kopii zapasowych danych.
Ale to inny tryb tworzenia kopii zapasowej.
- kopii pełnej bazy
- Database Backup różnicowy
- dziennika transakcji kopii zapasowych
- backup z kompresją
Jednak wadą tej metody jest to, że musi swoje studio zarządzania SQL być zainstalowany w systemie klienta.
można połączyć się z bazą danych przy użyciu SqlConnection i SqlCommand i wykonać następujący tekst polecenia na przykład:
BACKUP DATABASE [MyDatabase] TO DISK = 'C:\....\MyDatabase.bak'
Zobacz here przykłady.
Jest to dobra praktyka, aby użyć pliku konfiguracyjnego tak:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<connectionStrings>
<add name="MyConnString" connectionString="Data Source=(local);Initial Catalog=MyDB; Integrated Security=SSPI" ;Timeout=30"/>
</connectionStrings>
<appSettings>
<add key="BackupFolder" value="C:/temp/"/>
</appSettings>
</configuration>
Twój kod C# będzie coś takiego:
// read connectionstring from config file
var connectionString = ConfigurationManager.ConnectionStrings["MyConnString"].ConnectionString;
// read backup folder from config file ("C:/temp/")
var backupFolder = ConfigurationManager.AppSettings["BackupFolder"];
var sqlConStrBuilder = new SqlConnectionStringBuilder(connectionString);
// set backupfilename (you will get something like: "C:/temp/MyDatabase-2013-12-07.bak")
var backupFileName = String.Format("{0}{1}-{2}.bak",
backupFolder, sqlConStrBuilder.InitialCatalog,
DateTime.Now.ToString("yyyy-MM-dd"));
using (var connection = new SqlConnection(sqlConStrBuilder.ConnectionString))
{
var query = String.Format("BACKUP DATABASE {0} TO DISK='{1}'",
sqlConStrBuilder.InitialCatalog, backupFileName);
using (var command = new SqlCommand(query, connection))
{
connection.Open();
command.ExecuteNonQuery();
}
}
Może się mylę, ale czy to nie oznacza, że program C# musi działać na tym samym serwerze co baza danych? –
@Eric Wu - Ciąg połączenia w pliku konfiguracyjnym może wskazywać dowolny serwer SQL, nie musi znajdować się na tym samym komputerze. – michaelmsm89
Prawda. Myślałem, że to manipuluje plikiem w jakiś sposób na poziomie aplikacji. Wygląda na to, że _backupfolder_ odnosi się do ścieżki na serwerze bazy danych. –
działa na mnie:
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<string> GetAllUserDatabases()
{
var databases = new List<String>();
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);
}
}
dziękuję za ten kod. zaoszczędzony dużo czasu. –
Idealny .. Dziękujemy za udostępnienie .. –
Możesz użyć następujących zapytań do tworzenia kopii zapasowych i przywracania, musisz zmienić ścieżkę kopii zapasowej
Nazwa bazy danych = [dane]
zapasowa:
BACKUP DATABASE [data] TO DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Backup\data.bak' WITH NOFORMAT, NOINIT, NAME = N'data-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO
Restore:
RESTORE DATABASE [data] FROM DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Backup\data.bak' WITH FILE = 1, NOUNLOAD, REPLACE, STATS = 10
GO
Czym różni się ta odpowiedź od [tej odpowiedzi] (http://stackoverflow.com/a/9835597/660921), która płonie od czterech lat? – Carpetsmoker
SqlConnection con = new SqlConnection();
SqlCommand sqlcmd = new SqlCommand();
SqlDataAdapter da = new SqlDataAdapter();
DataTable dt = new DataTable();
con.ConnectionString = ConfigurationManager.ConnectionStrings["MyConString"].ConnectionString;
string backupDIR = "~/BackupDB";
string path = Server.MapPath(backupDIR);
try
{
var databaseName = "MyFirstDatabase";
con.Open();
string saveFileName = "HiteshBackup";
sqlcmd = new SqlCommand("backup database" +databaseName.BKSDatabaseName + "to disk='" + path + "\\" + saveFileName + ".Bak'", con);
sqlcmd.ExecuteNonQuery();
con.Close();
ViewBag.Success = "Backup database successfully";
return View("Create");
}
catch (Exception ex)
{
ViewBag.Error = "Error Occured During DB backup process !<br>" + ex.ToString();
return View("Create");
}
- 1. Jak mogę bezpiecznie utworzyć kopię zapasową ogromnej bazy danych?
- 2. Jak utworzyć kopię zapasową pojedynczej tabeli w bazie danych postgres?
- 3. Jak najprościej wykonać kopię zapasową bazy danych MongoDB GridFS?
- 4. Jak utworzyć kopię zapasową zawartości skrytki git?
- 5. serwer sql przywracający kopię zapasową błędu
- 6. Przywróć kopię zapasową Odmowa dostępu
- 7. Android 2.2 Backup danych: jak utworzyć kopię zapasową DefaultSharedPreferences?
- 8. Jak wykonać kopię zapasową instancji bazy danych Amazon RDS MS SQL Server i przywrócić lokalnie
- 9. Czy można wykonać kopię zapasową Bazy danych Firebase DB?
- 10. Nowa baza danych Firewall - Jak wykonać kopię zapasową
- 11. Jak utworzyć i przywrócić kopię zapasową z SqlAlchemy?
- 12. Jak wykonać kopię zapasową bazy danych za pomocą 100 wierszy w każdej tabeli?
- 13. Jak wykonać kopię zapasową i przywrócić bazę danych jako kopię na tym samym serwerze?
- 14. Otwórz "Utwórz kopię zapasową i zresetuj" w Ustawieniach programowo
- 15. Jak zrobić przyrostową kopię zapasową w MySQL
- 16. Jak wykonać pełną kopię zapasową bazy danych mysql przy użyciu narzędzia wiersza poleceń mysqldump
- 17. Jak wykonać kopię zapasową zadań agenta SQL Server?
- 18. Jak utworzyć kopię ramki danych w R
- 19. Program do przywracania/tworzenia kopii zapasowych bazy danych serwera SQL z klienta zdalnego programowo
- 20. Jak wykonać kopię zapasową menedżera repozytorium nexus
- 21. Jak wykonać kopię zapasową całej aplikacji w systemie Android?
- 22. Jak wykonać kopię zapasową funkcji tylko w Postgresie
- 23. Co powinienem wykonać kopię zapasową w ColdFusion 9?
- 24. Jak przywrócić kopię zapasową programu SQL Server 2008 R2 do LocalDb 2012
- 25. Skrypt SQL do "kopiowania" bazy danych
- 26. Jak zaimportować kopię zapasową Azure SQL (.bacpac) do LocalDB za pomocą Visual Studio?
- 27. Automatyczna kopia zapasowa bazy danych SQL
- 28. Tworzenie pliku bazy danych programu SQL Server CE programowo
- 29. Chcesz zrobić przyrostową kopię zapasową dla mongodb. Journaling? Oplog?
- 30. Jak mogę wykonać kopię zapasową lub zsynchronizować wiadro Amazon S3?
SMO oznacza obiektów zarządzania SQL zainstalowanych lokalnie na komputerze, na którym będzie wykonywał kopii zapasowej programu .NET , czyste rozwiązanie SQL nie. –