【问题标题】:How to create database backup, when DB not stored in Microsoft SQL Server?当数据库未存储在 Microsoft SQL Server 中时,如何创建数据库备份?
【发布时间】:2014-05-06 15:41:03
【问题描述】:

我正在使用存储在我项目的bin 文件夹中的 SQL Server 2008 R2 数据库构建 C# 应用程序。我使用 Linq to Sql 方法创建数据库并将其附加到我的项目中。

我遇到的问题是,当我尝试创建数据库的备份时。它抛出一个错误说

数据库 (database_name) 不存在确保名称输入正确。 BACKUP DATABASE 异常终止。

这是我在按钮单击事件中编写的代码:

try
{
    SaveFileDialog sd = new SaveFileDialog();
    sd.Filter = "SQL Server database backup files|*.bak";
    sd.Title = "Create Database Backup";

    if (sd.ShowDialog() == DialogResult.OK)
    {
        using (SqlConnection conn = new SqlConnection(connStr))
        {
            string sqlStmt=string.Format("BACKUP DATABASE <database_name> TO DISK='{0}'",sd.FileName);

            using (SqlCommand bu2 = new SqlCommand(sqlStmt, conn))
            {
                conn.Open();
                bu2.ExecuteNonQuery();
                conn.Close();

                MessageBox.Show("Backup Created Sucessfully");
            }
        }
    }
}
catch(Exception ex)
{
    MessageBox.Show(ex.ToString());
}

我的连接字符串:

string connStr = ConfigurationManager.ConnectionStrings["project_name.Properties.Settings.project‌​_nameConnectionString"].ConnectionString; 

然后从我的 app.config 文件中

<add name="project_name.Properties.Settings.project_nameConnectionString" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\database_name.mdf;Integrate‌​d Security=True;User Instance=True" providerName="System.Data.SqlClient" /> 

所以如果有人能解决我的问题,那将会很有帮助。

【问题讨论】:

  • 以下问题的答案似乎回答了这个问题:stackoverflow.com/questions/4466428/… 如果它没有完全回答问题,请提供一些额外的信息。
  • 如果您在连接字符串中使用AttachDbFileName= 方法,则不能使用BACKUP DATABASE,因为该数据库文件并未真正附加到SQL Server Express 实例。这是该方法的众多缺点和缺点之一
  • 你需要什么额外的细节@Ramhound&这里是我的连接字符串;字符串 connStr = ConfigurationManager.ConnectionStrings["project_name.Properties.Settings.project_nameConnectionString"].ConnectionString;然后从我的 app.config 文件

标签: c# sql-server database backup


【解决方案1】:

经过很长时间的头脑风暴,我终于成功了 所以,这里是解决方案:

try
{
    SaveFileDialog sd = new SaveFileDialog();
    sd.Filter = "SQL Server database backup files|*.bak";
    sd.Title = "Create Database Backup";

    if (sd.ShowDialog() == DialogResult.OK)
    {
        using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["project_name.Properties.Settings.project‌​_nameConnectionString"].ConnectionString))
        {
            string sqlStmt = string.Format("backup database [" + System.Windows.Forms.Application.StartupPath + "\\dbname.mdf] to disk='{0}'",sd.FileName);
            using (SqlCommand bu2 = new SqlCommand(sqlStmt, conn))
            {
                conn.Open();
                bu2.ExecuteNonQuery();
                conn.Close();

                MessageBox.Show("Backup Created Sucessfully");
            }                   
        }
    }
}
catch (Exception)
{
    MessageBox.Show("Backup Not Created");
}

来自这个问题的资源:@​​987654321@

【讨论】:

    【解决方案2】:

    整个 User Instance 和 AttachDbFileName= 方法是有缺陷的 - 充其量!在 Visual Studio 中运行您的应用程序时,它将复制 .mdf 文件(从您的 App_Data 目录到输出目录 - 通常是 .\bin\debug - 您的应用程序运行的位置)并且很可能 ,您的 INSERT 工作正常 - 但您最终只是查看了错误的 .mdf 文件

    此外,由于.mdf 文件没有永久附加到 SQL Server 实例,因此您不能在其上使用 BACKUP DATABASE 之类的命令。

    在我看来,真正的解决方案应该是

    1. 安装 SQL Server Express(反正你已经完成了)

    2. 安装 SQL Server Management Studio Express

    3. SSMS Express中创建你的数据库,给它一个逻辑名称(例如MyDatabase

    4. 使用它的逻辑数据库名称(在服务器上创建它时给出)连接到它——不要乱用物理数据库文件和用户实例。在这种情况下,您的连接字符串将类似于:

      Data Source=.\\SQLEXPRESS;Database=MyDatabase;Integrated Security=True
      

      其他一切都完全和以前一样......

    然后,完成此操作后,您还可以使用 BACKUP DATABASE MyDatabase .... 运行备份,没有任何问题

    【讨论】:

    • 感谢 @marc_s 的帮助,现在我无法将 BACKUP DATABASE 用于我的数据库,直到我在 SSMS Express 中创建它。然后对我来说,我必须为我的工作做一个工作,比如备份复制数据库并将其添加到压缩(使用保存文件对话框)和 RESOTRE 从所需文件夹解压缩文件并将其添加到应用程序安装文件夹。再次感谢大家的帮助。
    猜你喜欢
    • 2011-07-17
    • 1970-01-01
    • 2015-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-07
    • 2017-02-02
    • 2020-02-13
    相关资源
    最近更新 更多