Вот схема задачи msbuild, которую я написал для этого:
public class RestoreDb : Task
{
#region RequiredParameters
[Required]
public string ServerName
{
get
{
return m_ServerName;
}
set
...
}
[Required]
public string DbName
...
public string BackupFileName
...
#endregion
public override bool Execute()
{
try
{
SqlConnectionStringBuilder connectionStringBuilder = new SqlConnectionStringBuilder();
connectionStringBuilder.IntegratedSecurity = true;
connectionStringBuilder.DataSource = ServerName;
SqlConnection connection = new SqlConnection(connectionStringBuilder.ToString());
connection.Open();
Server server = new Server(new ServerConnection(connection));
if (server.Databases[DbName] != null)
{
Log.LogMessage("Dropping existing " + DbName + " on " + ServerName);
server.Databases[DbName].Drop();
}
else
{
Log.LogMessage(DbName + " on " + ServerName + " doesn't exist.");
}
Log.LogMessage(MessageImportance.High, "Restoring " + DbName + " on " + ServerName);
Database newDb = new Database(server, DbName);
Restore rs = new Restore();
rs.NoRecovery = false;
FileInfo fi = new FileInfo(server.Settings.BackupDirectory + "\\" + BackupFileName);
BackupDeviceItem bdi = new BackupDeviceItem(fi.FullName, DeviceType.File);
rs.Devices.Add(bdi);
rs.Database = DbName;
rs.Action = RestoreActionType.Database;
rs.SqlRestore(server);
Log.LogMessage(MessageImportance.High, "Restoring done.");
}
catch( Exception exc)
{
Log.LogErrorFromException(exc);
}
return !Log.HasLoggedErrors;
}
private string m_DbName;
...
}
}
использовать как:
<UsingTask AssemblyFile="bin\Release\MyTask.dll" TaskName="RestoreDb" />
<RestoreDb ServerName="localhost\sql2005" DbName="myDb" BackupFileName="myDb.bak"/>
Любые комментарии приветствуются!
Jan