我正在尝试从 SQL Server 2008 备份和还原数据库

本文关键字:备份 2008 还原 数据库 Server SQL | 更新日期: 2023-09-27 18:35:30

我正在尝试备份和还原 SQL Server 2008 数据库,但收到错误消息

数据库名称附近的语法不正确

下面是编写的

c# asp.net 的备份和还原代码。

我可以得到这方面的帮助吗?

private void btnbackup_Click(object sender, EventArgs e)
{
    try
    {
        if (combodatabase.Text.CompareTo("") == 0)
        {
            MessageBox.Show("Please select a Database");
            return;
        }
        con = new SqlConnection(connectionstring);
        con.Open();
        sql = "BACKUP DATABASE" + combodatabase.Text + " TO DISK='" + txtbackupfileloc.Text + "''" + combodatabase.Text + "-" + DateTime.Now.Ticks.ToString() + ".bak'";
        cmd = new SqlCommand(sql, con);
        cmd.ExecuteNonQuery();
        con.Close();
        con.Dispose();
        MessageBox.Show("Database Backup Successfully Completed.");
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

恢复代码:

private void btnrestore_Click(object sender, EventArgs e)
{
    try
    {
        if (combodatabase.Text.CompareTo("") == 0)
        {
            MessageBox.Show("Please Select a Database");
            return;
        }
        con = new SqlConnection(connectionstring);
        con.Open();
        sql = "ALTER DATABASE" + combodatabase.Text + "SET SINGLE_USR WITH ROLLBACK IMMEDIATELY ";
        sql += "RESTORE DATABASE" + combodatabase.Text + "From DISK='" + txtrestorefileloc.Text + "'With REPLACE;";
        cmd = new SqlCommand(sql, con);
        cmd.ExecuteNonQuery();
        con.Close();
        con.Dispose();
        MessageBox.Show("Database Successfully Restored");
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

我正在尝试从 SQL Server 2008 备份和还原数据库

备份数据库和数据库名称之间没有任何空格,这将是第一个问题,第二个(还原)代码也是如此。

您可以在调试模式下附加自己,以便在构建所有 sql 查询字符串后查看 SQL 命令是什么。那里似乎缺少很多空格。拥有它后,您可以将其发布在SQL Server Management Studio中,并在那里查看错误提示,可能会更容易。

最后但并非最不重要的一点是,如果您无法轻松调试应用程序或弹出 SQL 查询(显然情况并非如此,因为您显示了 ex。消息),您可以运行 SQL Server 探查器会话来检查针对 SQL Server 执行的查询。

SQL 语句中缺少一些空格

看看这个:

sql = "BACKUP DATABASE" + combodatabase.Text + " TO DISK='" + ....

如果选择一个名为 TEST 的数据库,则变为:

BACKUP DATABASETEST TO DISK=.....

或者这个:

sql = "ALTER DATABASE" + combodatabase.Text + "SET SINGLE_USR WITH ROLLBACK IMMEDIATELY ";
sql += "RESTORE DATABASE" + combodatabase.Text + "From DISK='" + txtrestorefileloc.Text + "'With REPLACE;";

成为

ALTER DATABASETESTSET SINGLE_USR WITH ROLLBACK IMMEDIATELY
RESTORE DATABASETESTFrom DISK=......

BACKUP DATABASE和数据库名称之间至少需要一个空格!一些贯穿整个代码 - 在将关键字和占位符串在一起时需要更加小心 - 有时它们之间需要空格

此外,如果您的数据库名称

以任何方式是"特殊的"(例如,它本身包含一个空格,以数字开头等),您可能需要将数据库名称放在方括号中:

BACKUP DATABASE [Test DB] .....
BACKUP DATABASE [7dwarfs] .....