如何创建数据库备份,当数据库不存储在Microsoft SQL Server

本文关键字:数据库 存储 Microsoft Server SQL 备份 何创建 创建 | 更新日期: 2023-09-27 18:15:11

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

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

Database (database_name)不存在,请确保名称输入正确。

备份数据库异常终止。

这是我写在我的按钮点击事件的代码:

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());
}

My Connection String:

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" /> 

所以如果有人有解决我的问题的方法,那将是有帮助的。

如何创建数据库备份,当数据库不存储在Microsoft SQL Server

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

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");
}

资源来自这个问题:如何从我创建的。mdf数据库备份

整个User Instance和AttachDbFileName=方法是有缺陷的-充其量!当你在Visual Studio中运行你的应用程序时,它会复制周围的.mdf文件(从你的App_Data目录到输出目录-通常是.'bin'debug -你的应用程序运行的地方)和最有可能,你的INSERT工作得很好-但你只是在看错误的。mdf文件在最后!

另外,由于.mdf文件不是永久附加到SQL Server实例上的,所以你不能在它上面使用BACKUP DATABASE这样的命令。

在我看来,真正的解决方案应该是
  1. 安装SQL Server Express(你已经这样做了)

  2. install SQL Server Management Studio Express

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

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

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

    和其他的都是和以前完全一样的

然后,一旦你这样做了,你也可以运行你的备份使用BACKUP DATABASE MyDatabase ....没有任何问题