SqlCommand的备份数据库(SqlCommand back up Database)

2019-09-19 02:29发布

我有一个C#winforms应用程序(.NET 2框架)。 我需要备份的数据库从我的应用程序。 我试图通过异步执行的SqlCommand的做到这一点。 该代码是没有例外执行,但我没有得到我的目的地.bak文件...

这是代码:

#region backup DB using T-SQL command

string connString = "Data Source=" + ConfigurationManager.AppSettings.Get("localhost_SQLEXPRESS") + ";Initial Catalog=" + db + ";UserID=" + ConfigurationManager.AppSettings.Get("user") + ";Password=" + ConfigurationManager.AppSettings.Get("password");
SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(connString);
builder.AsynchronousProcessing = true;
using (SqlConnection sqlConnection1 = new SqlConnection(builder.ConnectionString))
{
    using (SqlCommand cmd = new SqlCommand("BACKUP DATABASE " + db + " TO DISK=" + location + "\\" + ConfigurationManager.AppSettings.Get("DataBaseBackupsFolderName") + "\\" + db + ".bak'", sqlConnection1))
    {    
        sqlConnection1.Open();    
        IAsyncResult result = cmd.BeginExecuteNonQuery();

        while (!result.IsCompleted)
        {
            Thread.Sleep(100);
        }
    }
}
#endregion

Answer 1:

在SQL备份线路,你似乎缺少在路径备份文件的开头单引号。

  using (SqlCommand cmd = new SqlCommand("BACKUP DATABASE " + db + " TO DISK='" + location + "\\" + ConfigurationManager.AppSettings.Get("DataBaseBackupsFolderName") + "\\" +db + ".bak'", sqlConnection1)) 


Answer 2:

两个务必要尽量隔离问题:

1)获取得到的字符串(你中SqlCommand执行一个SQL Server上手动运行它,以确保备份commnad是正确的。

2)尝试用普通的ExecuteNonQuery同步命令,看看你得到一个SQL Server异常



Answer 3:

你应该调用EndExecuteNonQuery()以抛出任何异常最终,从而了解什么是不对您的SQL语句在你的SqlCommand实例:

IAsyncResult result = cmd.BeginExecuteNonQuery();

// Wait for the command to complete

result.AsyncWaitHandle.WaitOne();

// End the execution and throw any eventual exception

cmd.EndExecuteNonQuery(result);

正如你所看到的,我也对命令的等待句柄更有效的等待更换你原来的Thread.Sleep()循环结构。

引用MSDN :

每次调用BeginOperationName,应用程序还应该调用EndOperationName获得操作的结果。



文章来源: SqlCommand back up Database