Я пытаюсь использовать SMO в приложении Windows Forms для восстановления базы данных SQL Server.Моя форма имеет кнопку (button1) и TextBox (textBox1).При нажатии кнопки вызывается функция, которая проверяет, запущен ли экземпляр SQL Server.Если он не запущен, я запускаю экземпляр и выполняю восстановление.Это работает, но форма не реагирует на выполнение функции.Вот мой код:
using System;
using System.Windows.Forms;
using Microsoft.SqlServer.Management.Common;
using Microsoft.SqlServer.Management.Smo;
using Microsoft.SqlServer.Management.Smo.Wmi;
namespace WindowsFormsApplication7
{
delegate void RestoreDatabaseDelegate();
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
BeginInvoke(
new RestoreDatabaseDelegate(RestoreDatabase));
}
private void RestoreDatabase()
{
//textBox1.Text = "";
try
{
Restore dbRestore = new Restore();
dbRestore.Database = "Sandbox";
dbRestore.Devices.Add(
new BackupDeviceItem(
@"C:\scripts\sandbox.bak", DeviceType.File));
Service service =
new ManagedComputer().Services["MSSQL$SQLEXPRESS2008"];
if (service.ServiceState == ServiceState.Stopped)
{
service.Start();
}
ServerConnection connection =
new ServerConnection(@"TEST\SQLEXPRESS2008");
connection.LoginSecure = true;
Server server = new Server(connection);
Database db = server.Databases[dbRestore.Database];
dbRestore.ReplaceDatabase = true;
dbRestore.Complete +=
new ServerMessageEventHandler(RestoreComplete);
dbRestore.Information +=
new ServerMessageEventHandler(RestoreInformation);
dbRestore.SqlRestoreAsync(server);
}
catch (Exception ex)
{
/*textBox1.Text +=
(ex.Message + Environment.NewLine);*/
}
}
private void RestoreComplete(
object sender, ServerMessageEventArgs e)
{
/*textBox1.Text +=
(e.Error.Message + Environment.NewLine);*/
}
private void RestoreInformation(
object sender, ServerMessageEventArgs e)
{
/*textBox1.Text +=
(e.Error.Message + Environment.NewLine);*/
}
}
}
Есть ли способ обеспечить адаптацию формы во время восстановления (и запуска экземпляра SQL Server)?Что я делаю не так?