![](/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.