簡體   English   中英

我正在嘗試從SQL Server 2008備份和還原數據庫

[英]I'm trying to backup and restore database from SQL Server 2008

我正在嘗試備份和還原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);
    }
}

BACKUP DATABASE和數據庫名稱之間沒有空格,這將是第一個問題,第二個(恢復)代碼也是如此。

建立所有sql查詢字符串后,可以將自己附加在調試模式下以查看SQL命令是什么。 似乎那里缺少許多空格。 有了它之后,可以將其發布到SQL Server Management Studio中,並在那里查看錯誤提示,這可能會更容易。

最后但並非最不重要的一點是,如果您無法輕松調試應用程序或彈出SQL查詢(由於顯示ex.Message顯然不是這種情況),則可以運行SQL Server Profiler會話來檢查針對SQL Server執行的查詢。

您在SQL語句中缺少一些空格

看一下這個:

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

如果選擇一個名為TEST的數據庫, 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] .....

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM