【问题标题】:Backup SQL Server 2008 database to a sql file(like .sql) using c#使用 c# 将 SQL Server 2008 数据库备份到 sql 文件(如 .sql)
【发布时间】:2015-02-12 00:22:41
【问题描述】:

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

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

谢谢

【问题讨论】:

  • 您的意思是希望备份为带有create database X; create table Y (...); insert into y values (...) 之类语句的.sql 文件?
  • 如果你想像在 mysql 中一样创建转储文件,最好使用 SQL Server 管理对象
  • @LasseVågsætherKarlsen 我想要和你说的一样。你能帮帮我吗?
  • @MuhammadWaheed 我不知道如何为 SQL Server 做到这一点,我只问了一个澄清问题,因为他提到了 .sql 的备份格式扩展名,通常为带有 sql 的文本文件保留声明。

标签: c# sql sql-server sql-server-2008


【解决方案1】:

您可以使用 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 的生成脚本推荐

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

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

【讨论】:

  • 如果你只打算处理 sql server,不建议使用 .sql 文件进行备份
  • SQL 备份的扩展名为 .bak 而不是 .sql。而已!您可以使用 RESTORE 将备份保存到 db 中,或者按照 Aravind 给出的示例或此示例:stackoverflow.com/questions/6943137/…
  • 我想编码,因为我想使用 c# 获取 sql 格式的备份文件
  • @user2882066: SQL Server 中有 IS NO .sql 格式备份功能 ....
  • @marc_s 有.sql 格式用于备份表或数据库的创建结构。
【解决方案2】:

试试这个

 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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多