![](/img/trans.png)
[英]I'm trying to restore a SQL Server database backup with this code :
[英]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.