Categories
.NET

Ejecutar sentencias T-SQL durante la instalación de aplicaciones .NET

Anteriormente usaba un método algo "brusco" para conseguir crear la base de datos y el esquema correspondiente durante la instalación de una aplicación. Sin embargo, hace poco acabo de enterarme a través de un blog de una forma más elegante de hacer esto para base de datos SQL Server; lo único que se necesita es crear un instalador personalizado y hacer uso de los ensamblados que provee SQL Server Management Objects:

csharp:

public class SqlScriptInstaller : Installer
{
    private readonly string sqlScript_;

    public SqlScriptInstaller(string sqlScript)
    {
        this.sqlScript_ = sqlScript;
    }

    public SqlScriptInstaller(Stream sqlStream)
    {
        using (StreamReader sr = new StreamReader(sqlStream))
        {
            this.sqlScript_ = sr.ReadToEnd();
        }
    }

    public override void Install(IDictionary stateSaver)
    {
        string connectionString = this.Context.Parameters["ConnectionString"];

        using (SqlConnection conn = new SqlConnection(connectionString))
        {
            ServerConnection serverConn = new ServerConnection(conn);
            Server sqlServer = new Server(serverConn);
            sqlServer.ConnectionContext.ExecuteNonQuery(this.sqlScript_);
        }

        base.Install(stateSaver);
    }
}

El script que acompañe a la aplicación puede incluir múltiples sentencias Transact-SQL (incluyendo la sentencia GO).