1

如何使用 c# 将备份 SQL Server 2008 数据库备份到 sql 文件(如 .sql)

我正在创建一个程序,它使用一个只有几个表的简单数据库。我需要在 SQL 文件(如 .SQL)之间备份和恢复数据库。我该怎么做..

谢谢你

4

2 回答 2

2

您可以使用 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 推荐

右键单击数据库;任务 -> 生成脚本

  1. 选择您的表,单击下一步
  2. 单击高级按钮
  3. 查找要编写脚本的数据类型 - 选择架构和数据。
  4. 然后您可以选择保存到文件,或放入新的查询窗口。
  5. 为项目符号 2 中选择的所有表数据生成 CREATE 和 INSERT 语句。

看到这张图片

于 2013-10-15T10:29:27.460 回答
0

尝试这个

 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;
于 2015-02-11T16:22:41.940 回答