Utilizzo di “GO” all’interno di una transazione

Sto creando un’app Web che tenta di installare / aggiornare il database su App_Start. Parte della procedura di installazione è garantire che nel database siano installate le funzionalità di asp.net. Per questo sto usando l’object System.Web.Management.SqlServices.

La mia intenzione è quella di fare tutto il lavoro del database all’interno di una transazione SQL e se qualcuno di questi fallisce, ripristina la transazione e lascia intatto il database.

l’object SqlServices ha un metodo “Installa” che accetta ConnectionString ma non una transazione. Quindi, invece, uso SqlServices.GenerateApplicationServicesScripts in questo modo:

string script = SqlServices.GenerateApplicationServicesScripts(true, SqlFeatures.All, _connection.Database); SqlHelper.ExecuteNonQuery(transaction, CommandType.Text, script, ...); 

e quindi utilizzo SqlHelper dalla Enterprise Library.

ma questo genera un’eccezione con un carico di errori, alcuni sono sotto

 Incorrect syntax near 'GO'. Incorrect syntax near 'GO'. Incorrect syntax near 'GO'. Incorrect syntax near 'GO'. Incorrect syntax near the keyword 'USE'. Incorrect syntax near the keyword 'CREATE'. Incorrect syntax near 'GO'. The variable name '@cmd' has already been declared. Variable names must be unique within a query batch or stored procedure. 

Presumo che ci sia qualche problema con l’utilizzo dell’istruzione GO all’interno di una transazione SQL.

Come posso far funzionare questo script generato quando viene eseguito in questo modo.