Tôi muốn viết mã để sao lưu Cơ sở dữ liệu Sql Server 2008 của mình bằng C# trong .Net 4 FrameWork. Bất cứ ai có thể giúp đỡ trong việc này.Cách sao lưu Cơ sở dữ liệu Sql Lập trình trong C#
Trả lời
sau đây Link đã giải thích chi tiết đầy đủ về cách sao lưu cơ sở dữ liệu sql server 2008 sử dụng C#
Sql Cơ sở dữ liệu sao lưu có thể được thực hiện bằng nhiều cách. Bạn có thể sử dụng lệnh Sql như trong câu trả lời khác hoặc đã tạo lớp của riêng bạn để sao lưu dữ liệu.
Nhưng đây là các chế độ sao lưu khác nhau.
- Full Database Backup
- Cơ sở dữ liệu Differential Backup
- Transaction Log Sao lưu
- Sao lưu với Compression
Nhưng nhược điểm với phương pháp này là nó cần studio quản lý sql của bạn phải được cài đặt trên hệ thống khách hàng của bạn.
bạn có thể kết nối với cơ sở dữ liệu sử dụng SqlConnection và SqlCommand và thực hiện các văn bản lệnh sau ví dụ:
BACKUP DATABASE [MyDatabase] TO DISK = 'C:\....\MyDatabase.bak'
Xem here cho ví dụ.
Đó là một thực hành tốt để sử dụng một tập tin cấu hình như thế này:
<?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>
Mã của bạn C# sẽ là một cái gì đó như thế này:
// 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();
}
}
Tôi có thể sai ở đây, nhưng không có nghĩa là chương trình C# phải chạy trên cùng một máy chủ với cơ sở dữ liệu? –
@Eric Wu - Chuỗi kết nối trong tệp cấu hình có thể trỏ tới bất kỳ máy chủ SQL nào, nó không phải nằm trên cùng một máy. – michaelmsm89
Đúng. Tôi nghĩ rằng nó đã được thao tác các tập tin trong một số cách ở cấp ứng dụng. Có vẻ như _backupfolder_ đề cập đến một đường dẫn trong máy chủ cơ sở dữ liệu. –
trình cho tôi:
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);
}
}
cảm ơn bạn đã nhập mã này. tiết kiệm rất nhiều thời gian. –
Hoàn hảo .. Cảm ơn bạn đã chia sẻ .. –
Bạn có thể sử dụng các truy vấn sau đây để Sao lưu và Khôi phục, bạn phải thay đổi đường dẫn cho bản sao lưu của bạn
Database name = [dữ liệu]
sao lưu:
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
Câu trả lời này khác với [câu trả lời này] (http://stackoverflow.com/a/9835597/660921) đã bị cháy trong bốn năm như thế nào? – 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. Cơ sở dữ liệu SQL tự động sao lưu
- 2. Sử dụng cơ sở dữ liệu sao lưu theo lập trình
- 3. Quá trình sao lưu/khôi phục cơ sở dữ liệu
- 4. Sao lưu cơ sở dữ liệu MySQL
- 5. Sao lưu cơ sở dữ liệu SQL Server với tiến trình
- 6. Khôi phục/sao lưu cơ sở dữ liệu Sql Server từ máy khách từ xa theo lập trình
- 7. Làm cách nào để tạo một cơ sở dữ liệu theo lập trình trong SQL Server?
- 8. Cách sao lưu và khôi phục cơ sở dữ liệu ORACLE 11g Giống như cơ sở dữ liệu SQL2005
- 9. iOS: Sao lưu cơ sở dữ liệu lõi trong iCloud?
- 10. sao lưu cơ sở dữ liệu mysql với mysqldump
- 11. Làm cách nào để lưu trữ băm trong cơ sở dữ liệu SQL Server bằng C#?
- 12. Cơ sở dữ liệu lớn trong lập trình chức năng
- 13. Làm cách nào để sao lưu cơ sở dữ liệu SQL bằng PHP?
- 14. Sao lưu CouchDB và nhân bản cơ sở dữ liệu
- 15. Trình nghe WebSocket cho Cơ sở dữ liệu Microsoft SQL
- 16. SQL 2005 - cách nhanh chóng để sao chép nhanh một cơ sở dữ liệu + dữ liệu
- 17. Cơ sở dữ liệu Lập trình chức năng ở Clojure
- 18. Thả cơ sở dữ liệu SQL Server
- 19. cơ sở dữ liệu: tại sao cặp
- 20. Cấu trúc cơ sở dữ liệu SQL
- 21. enums trong cơ sở dữ liệu SQL Server
- 22. Cách chuyển đổi cơ sở dữ liệu Visual Foxpro sang cơ sở dữ liệu SQL Server
- 23. Lưu trữ giá trị C# DateTimeOffset trong cơ sở dữ liệu SQL Server 2005
- 24. Cách sao chép các khung nhìn từ một cơ sở dữ liệu sang cơ sở dữ liệu khác
- 25. Cách khôi phục cơ sở dữ liệu từ C#
- 26. cơ sở dữ liệu độc lập
- 27. Sao lưu cơ sở dữ liệu SQL Server một phần (không bao gồm một số bảng)
- 28. Sao chép các bảng từ cơ sở dữ liệu này sang cơ sở dữ liệu khác trong SQL Server
- 29. Cách mở cơ sở dữ liệu SQL Compact chỉ đọc
- 30. cách lưu trữ mật khẩu trong cơ sở dữ liệu?
SMO ngụ ý đối tượng quản lý SQL cài đặt cục bộ trên máy tính này nơi .NET sao lưu thực thi chương trình , giải pháp SQL thuần túy thì không. –