在VB.NET中使用SQLCommand恢复备份

时间:2014-01-02 21:00:42

标签: sql sql-server vb.net sqlclient

我有一个我正在创建的VB.NET控制台应用程序,它将使人们更容易使用某些测试数据库,其中一部分是具有恢复数据库的功能。我认为这是相当简单的,这是我到目前为止的代码:

Sub Restore()
    con = New SqlConnection("Data Source=" & utilnamespace.sqlSvr & ";Database=Master;integrated security=SSPI;")
    cmd = New SqlCommand("ALTER DATABASE [db] SET OFFLINE WITH ROLLBACK IMMEDIATE RESTORE DATABASE db FROM DISK = 'G:\db.bak' WITH REPLACE, STATS = 10", con)
    cmd.Connection.Open()
    cmd.ExecuteNonQuery()
    Console.WriteLine(cmd.CommandText)
    cmd.Connection.Close()

End Sub

如果我在SSMS中运行它,SQL工作正常,但是如果我尝试从应用程序运行它会超时。问题是我已经阅读了this,我仍然不确定该怎么做。

我应该使用BeginExecuteNonQuery然后让它以某种方式监听语句完成消息吗?

2 个答案:

答案 0 :(得分:1)

即使我相信显示等待表单并等待某种确认对最终用户来说会更好...您是否尝试更改连接字符串中的超时以快速解决它?

例如(秒):

string connStr = "Data Source=(local);Initial Catalog=db;
       Integrated Security=SSPI;Connection Timeout=30";

另请查看以下链接:

  1. SQL Server Management Objects (SMO)
  2. SQL Server 2008 - Backup and Restore Databases using SMO

答案 1 :(得分:0)

如果数据库太大,则可以增加Command(而不是连接字符串)的超时时间

cmd.Connection.Open()
cmd.CommandTimeout = 100
cmd.ExecuteNonQuery()
Console.WriteLine(cmd.CommandText)
cmd.Connection.Close()
相关问题