views:

142

answers:

2

I have been trying to execute sql scripts from dotnet (C#) but the sql scripts could contain GO statements and I would like to be able to wrap the collection of scripts in a transaction.

I found this question and the accepted answer got me going for handling the GO statements, but if I use a BeginTransaction it throws a InvalidOperationException at the "new ServerConnection" line.

SqlConnection connection = new SqlConnection(connectionString);
connection.Open();
SqlTransaction transaction = connection.BeginTransaction(transactionName);
ServerConnection serverConnection = new ServerConnection(connection);

I am running this against a SQL 2005 server.

+1  A: 

Try starting the transaction after you've attached the ServerConnection to the SqlConnection's settings.

Also, what are you using ServerConnection for that you can't do from SqlConnection?

Cade Roux
GO commands in the SQL scripts are not supported from SqlConnection
benPearce
Use Regex.Split to split the script on the GO commands. Execute the batches one at a time on the same connection, with the same transaction.
John Saunders
OK. I think you can make a ServerConnection without a SqlConnection, so I'm not sure you need the SqlConnection, nor do you need to start a transaction on it, since you can start a transaction on the ServerConnection after it is made.
Cade Roux
A: 

Try using the BeginTransaction and CommitTransaction methods on the ServerConnection instance instead. I use this without any problems.

Aaronaught