如何使用 c# 将备份 SQL Server 2008 数据库备份到 sql 文件(如 .sql)
我正在创建一个程序,它使用一个只有几个表的简单数据库。我需要在 SQL 文件(如 .SQL)之间备份和恢复数据库。我该怎么做..
谢谢你
如何使用 c# 将备份 SQL Server 2008 数据库备份到 sql 文件(如 .sql)
我正在创建一个程序,它使用一个只有几个表的简单数据库。我需要在 SQL 文件(如 .SQL)之间备份和恢复数据库。我该怎么做..
谢谢你
您可以使用 SQL Server 备份向导或使用 SQL Server Backup Database 语句进行数据库备份
SQL Server 管理对象 (SMO) 是一组对象,旨在对管理 Microsoft SQL Server 的各个方面进行编程。
要使用 C# 进行数据库备份,您必须在应用程序中添加以下引用 -
Microsoft.SqlServer.ConnectionInfo
Microsoft.SqlServer.Management.Sdk.Sfc
Microsoft.SqlServer.Smo
Microsoft.SqlServer.SmoExtended
Microsoft.SqlServer.SqlEnum
在您的 .CS 文件中,您必须使用以下命名空间 -
using Microsoft.SqlServer.Management.Smo;
using Microsoft.SqlServer.Management.Common;
使用上述命名空间后,编写以下代码以进行数据库备份-
public void BackupDatabase(string databaseName, string userName, string password, string serverName, string destinationPath)
{
//Define a Backup object variable.
Backup sqlBackup = new Backup();
//Specify the type of backup, the description, the name, and the database to be backed up.
sqlBackup.Action = BackupActionType.Database;
sqlBackup.BackupSetDescription = "BackUp of:" + databaseName + "on" + DateTime.Now.ToShortDateString();
sqlBackup.BackupSetName = "FullBackUp";
sqlBackup.Database = databaseName;
//Declare a BackupDeviceItem
BackupDeviceItem deviceItem = new BackupDeviceItem(destinationPath + "FullBackUp.bak", DeviceType.File);
//Define Server connection
ServerConnection connection = new ServerConnection(serverName, userName, password);
//To Avoid TimeOut Exception
Server sqlServer = new Server(connection);
sqlServer.ConnectionContext.StatementTimeout = 60 * 60;
Database db = sqlServer.Databases[databaseName];
sqlBackup.Initialize = true;
sqlBackup.Checksum = true;
sqlBackup.ContinueAfterError = true;
//Add the device to the Backup object.
sqlBackup.Devices.Add(deviceItem);
//Set the Incremental property to False to specify that this is a full database backup.
sqlBackup.Incremental = false;
sqlBackup.ExpirationDate = DateTime.Now.AddDays(3);
//Specify that the log must be truncated after the backup is complete.
sqlBackup.LogTruncation = BackupTruncateLogType.Truncate;
sqlBackup.FormatMedia = false;
//Run SqlBackup to perform the full database backup on the instance of SQL Server.
sqlBackup.SqlBackup(sqlServer);
//Remove the backup device from the Backup object.
sqlBackup.Devices.Remove(deviceItem);
}
使用 SQL Server 的 Generate Scripts 推荐
右键单击数据库;任务 -> 生成脚本
尝试这个
try
{
StringBuilder resultScript = new StringBuilder(string.Empty);
StringBuilder resultScript1 = new StringBuilder(string.Empty);
var connStr = @"Data Source=.;Initial Catalog=MatrixEPOS;Integrated Security=True";
var tables = new[] { "tblProductName", "tblProductSize", "tblProductType", "tblcheck", "tblcheckdetails", "tblSubProduct", "tblMeals", "tblMealDetails",
"tblMealSizes","tblToppings","tblToppings1","tblToppingsSize","tblDressingSize"};
ScriptingOptions scriptOptions = new ScriptingOptions();
Server srv1 = new Server(".");
Database db1 = srv1.Databases["MatrixEPOS"];
StringBuilder sb = new StringBuilder();
Urn[] ur;
resultScript.AppendLine("Use MatrixEPOS");
resultScript.AppendLine("GO");
for(int i = 0; i < tables.Length; i++)
{
// Table tbl = db1.Tables[tables[i]];
Scripter scr = new Scripter(srv1);
foreach(Table table in db1.Tables)
{
if(table.Name == tables[i].ToString())
{
// Only include lookup tables
if(table.ForeignKeys.Count == 0)
{
ScriptingOptions options = new ScriptingOptions();
options.DriAll = false;
options.ScriptSchema = false;
options.ScriptData = true;
scr.Options = options;
// Add script to file content
foreach(string scriptLine in scr.EnumScript(new Urn[] { table.Urn }))
{
string line = scriptLine;
line = line.Replace("SET ANSI_NULLS ON", string.Empty);
line = line.Replace("SET QUOTED_IDENTIFIER ON", string.Empty);
line = line.Replace("SET ANSI_NULLS OFF", string.Empty);
line = line.Replace("SET QUOTED_IDENTIFIER OFF", string.Empty);
resultScript.AppendLine(line.Trim());
}
//resultScript1.AppendLine(table.Name);
//ur = table.Urn;
}
}
else { }
}
}
string name12 = resultScript1 + ".sql";
string fileName = string.Format("{0}.sql", "abc");
File.WriteAllText(Path.Combine("G:\\", fileName), resultScript.ToString());
}
catch(Exception err)
{
Console.WriteLine(err.Message);
}
我浪费了我 2 天的时间,希望它对你有帮助
重要的是不要忘记添加参考
using Microsoft.SqlServer.Management.Common;
using Microsoft.SqlServer.Management.Sdk.Sfc;
using Microsoft.SqlServer.Management.Smo;