我有一个我正在创建的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
然后让它以某种方式监听语句完成消息吗?
答案 0 :(得分:1)
即使我相信显示等待表单并等待某种确认对最终用户来说会更好...您是否尝试更改连接字符串中的超时以快速解决它?
例如(秒):
string connStr = "Data Source=(local);Initial Catalog=db;
Integrated Security=SSPI;Connection Timeout=30";
另请查看以下链接:
答案 1 :(得分:0)
如果数据库太大,则可以增加Command(而不是连接字符串)的超时时间
cmd.Connection.Open()
cmd.CommandTimeout = 100
cmd.ExecuteNonQuery()
Console.WriteLine(cmd.CommandText)
cmd.Connection.Close()