Greetings,

I have two SqlCommands objects that each need to execute concurrently but I
want them both to be a part of the same transaction.

What I'm doing is created one SqlCommand and Beginning a transaction.

I have another SqlCommand that is being executed from within an Asynchronous
delegate that needs to participate in the same transaction. The problem is
that I get the infamous exception stating that the connection is already in
use.

COM+ is not an answer here.

What I want to know is if there is a way to make this work correctly using
only ADO.NET?


Thanks,
Shawn

Re: Concurrent Connections / Shared Transaction by Dumitru

Dumitru
Sat Mar 12 07:17:31 CST 2005

Given the current status of ADO.NET (version 1.1), you can not do what you
want. Because the SqlClient provider permit only one command running on a
given connection at a time, the only solution will be a distributed
transaction coordinator + 2 connections with 2 commands executed
concurrently aka ES/COM+ in .NET . or wait until ADO.NET 2.0 will be
released :), version which will permit this behavior.



Dumitru


"Shawn B." <leabre@html.com> wrote in message
news:uA6kqFtJFHA.1096@tk2msftngp13.phx.gbl...
> Greetings,
>
> I have two SqlCommands objects that each need to execute concurrently but
> I
> want them both to be a part of the same transaction.
>
> What I'm doing is created one SqlCommand and Beginning a transaction.
>
> I have another SqlCommand that is being executed from within an
> Asynchronous
> delegate that needs to participate in the same transaction. The problem
> is
> that I get the infamous exception stating that the connection is already
> in
> use.
>
> COM+ is not an answer here.
>
> What I want to know is if there is a way to make this work correctly using
> only ADO.NET?
>
>
> Thanks,
> Shawn
>
>



Re: Concurrent Connections / Shared Transaction by Angel

Angel
Mon Mar 14 00:14:09 CST 2005

As long as both connections are to the same instance of Sql Server you can
use sp_bindsession to get this behavior without having to use distributed
transactions.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_sp_ba-bz_9ini.asp

Hope this helps.
--
Angel Saenz-Badillos [MS] Managed Providers
This posting is provided "AS IS", with no warranties, and confers no
rights.Please do not send email directly to this alias.
This alias is for newsgroup purposes only.
I am now blogging about ADO.NET: http://weblogs.asp.net/angelsb/




"Dumitru Sbenghe" <sbenghe@yahoo.com> wrote in message
news:uyT4fXwJFHA.2752@TK2MSFTNGP10.phx.gbl...
> Given the current status of ADO.NET (version 1.1), you can not do what you
> want. Because the SqlClient provider permit only one command running on a
> given connection at a time, the only solution will be a distributed
> transaction coordinator + 2 connections with 2 commands executed
> concurrently aka ES/COM+ in .NET . or wait until ADO.NET 2.0 will be
> released :), version which will permit this behavior.
>
>
>
> Dumitru
>
>
> "Shawn B." <leabre@html.com> wrote in message
> news:uA6kqFtJFHA.1096@tk2msftngp13.phx.gbl...
> > Greetings,
> >
> > I have two SqlCommands objects that each need to execute concurrently
but
> > I
> > want them both to be a part of the same transaction.
> >
> > What I'm doing is created one SqlCommand and Beginning a transaction.
> >
> > I have another SqlCommand that is being executed from within an
> > Asynchronous
> > delegate that needs to participate in the same transaction. The problem
> > is
> > that I get the infamous exception stating that the connection is already
> > in
> > use.
> >
> > COM+ is not an answer here.
> >
> > What I want to know is if there is a way to make this work correctly
using
> > only ADO.NET?
> >
> >
> > Thanks,
> > Shawn
> >
> >
>
>



Re: Concurrent Connections / Shared Transaction by Shawn

Shawn
Mon Mar 14 00:59:57 CST 2005

Angel, you are amazing. I read your blog frequently, this is certainly in
your area of expertise. Thanks for the help.


Thanks,
Shawn.



"Angel Saenz-Badillos[MS]" <angelsa@online.microsoft.com> wrote in message
news:uJbeJ0FKFHA.1340@TK2MSFTNGP10.phx.gbl...
> As long as both connections are to the same instance of Sql Server you can
> use sp_bindsession to get this behavior without having to use distributed
> transactions.
>
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_sp_ba-bz_9ini.asp
>
> Hope this helps.
> --
> Angel Saenz-Badillos [MS] Managed Providers
> This posting is provided "AS IS", with no warranties, and confers no
> rights.Please do not send email directly to this alias.
> This alias is for newsgroup purposes only.
> I am now blogging about ADO.NET: http://weblogs.asp.net/angelsb/
>
>
>
>
> "Dumitru Sbenghe" <sbenghe@yahoo.com> wrote in message
> news:uyT4fXwJFHA.2752@TK2MSFTNGP10.phx.gbl...
> > Given the current status of ADO.NET (version 1.1), you can not do what
you
> > want. Because the SqlClient provider permit only one command running on
a
> > given connection at a time, the only solution will be a distributed
> > transaction coordinator + 2 connections with 2 commands executed
> > concurrently aka ES/COM+ in .NET . or wait until ADO.NET 2.0 will be
> > released :), version which will permit this behavior.
> >
> >
> >
> > Dumitru
> >
> >
> > "Shawn B." <leabre@html.com> wrote in message
> > news:uA6kqFtJFHA.1096@tk2msftngp13.phx.gbl...
> > > Greetings,
> > >
> > > I have two SqlCommands objects that each need to execute concurrently
> but
> > > I
> > > want them both to be a part of the same transaction.
> > >
> > > What I'm doing is created one SqlCommand and Beginning a transaction.
> > >
> > > I have another SqlCommand that is being executed from within an
> > > Asynchronous
> > > delegate that needs to participate in the same transaction. The
problem
> > > is
> > > that I get the infamous exception stating that the connection is
already
> > > in
> > > use.
> > >
> > > COM+ is not an answer here.
> > >
> > > What I want to know is if there is a way to make this work correctly
> using
> > > only ADO.NET?
> > >
> > >
> > > Thanks,
> > > Shawn
> > >
> > >
> >
> >
>
>



Re: Concurrent Connections / Shared Transaction by Pablo

Pablo
Mon Mar 14 17:32:43 CST 2005

Actually, bound sessions allow you to share the transaction space among two
connections but doesn't give you concurrent access to it. If you try to
execute a batch on a connection while the other is actively doing something
within the transaction the server will return an error saying that the
transaction context is in use.

COM+ is the only solution I know of for this scenario. Even with COM+/DTC
you'll see some serialization around the transaction. In ADO.NET 2.0 + SQL
Server 2005 you can mix MARS plus asynchronous command execution to submit
two requests concurrently within the same transaction; however, note that in
that case you won't get parallelism in the server; multiple MARS sessions
within a connection are interleaved, not executed in parallel.

--
Pablo Castro
Program Manager - ADO.NET Team
Microsoft Corp.

This posting is provided "AS IS" with no warranties, and confers no rights.


"Angel Saenz-Badillos[MS]" <angelsa@online.microsoft.com> wrote in message
news:uJbeJ0FKFHA.1340@TK2MSFTNGP10.phx.gbl...
> As long as both connections are to the same instance of Sql Server you can
> use sp_bindsession to get this behavior without having to use distributed
> transactions.
> http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_sp_ba-bz_9ini.asp
>
> Hope this helps.
> --
> Angel Saenz-Badillos [MS] Managed Providers
> This posting is provided "AS IS", with no warranties, and confers no
> rights.Please do not send email directly to this alias.
> This alias is for newsgroup purposes only.
> I am now blogging about ADO.NET: http://weblogs.asp.net/angelsb/
>
>
>
>
> "Dumitru Sbenghe" <sbenghe@yahoo.com> wrote in message
> news:uyT4fXwJFHA.2752@TK2MSFTNGP10.phx.gbl...
>> Given the current status of ADO.NET (version 1.1), you can not do what
>> you
>> want. Because the SqlClient provider permit only one command running on a
>> given connection at a time, the only solution will be a distributed
>> transaction coordinator + 2 connections with 2 commands executed
>> concurrently aka ES/COM+ in .NET . or wait until ADO.NET 2.0 will be
>> released :), version which will permit this behavior.
>>
>>
>>
>> Dumitru
>>
>>
>> "Shawn B." <leabre@html.com> wrote in message
>> news:uA6kqFtJFHA.1096@tk2msftngp13.phx.gbl...
>> > Greetings,
>> >
>> > I have two SqlCommands objects that each need to execute concurrently
> but
>> > I
>> > want them both to be a part of the same transaction.
>> >
>> > What I'm doing is created one SqlCommand and Beginning a transaction.
>> >
>> > I have another SqlCommand that is being executed from within an
>> > Asynchronous
>> > delegate that needs to participate in the same transaction. The
>> > problem
>> > is
>> > that I get the infamous exception stating that the connection is
>> > already
>> > in
>> > use.
>> >
>> > COM+ is not an answer here.
>> >
>> > What I want to know is if there is a way to make this work correctly
> using
>> > only ADO.NET?
>> >
>> >
>> > Thanks,
>> > Shawn
>> >
>> >
>>
>>
>
>



Re: Concurrent Connections / Shared Transaction by Angel

Angel
Tue Mar 15 18:10:00 CST 2005

That's why Pablo gets paid the big bucks :) Seriously if you want the best
info always look for his posts and articles.

He is completelly correct by the way, you will not be able to use this with
concurrently operating connections, sorry.
--
Angel Saenz-Badillos [MS] Managed Providers
This posting is provided "AS IS", with no warranties, and confers no
rights.Please do not send email directly to this alias.
This alias is for newsgroup purposes only.
I am now blogging about ADO.NET: http://weblogs.asp.net/angelsb/




"Pablo Castro [MS]" <pablocas@online.microsoft.com> wrote in message
news:elFsi4OKFHA.1500@TK2MSFTNGP09.phx.gbl...
> Actually, bound sessions allow you to share the transaction space among
two
> connections but doesn't give you concurrent access to it. If you try to
> execute a batch on a connection while the other is actively doing
something
> within the transaction the server will return an error saying that the
> transaction context is in use.
>
> COM+ is the only solution I know of for this scenario. Even with COM+/DTC
> you'll see some serialization around the transaction. In ADO.NET 2.0 + SQL
> Server 2005 you can mix MARS plus asynchronous command execution to submit
> two requests concurrently within the same transaction; however, note that
in
> that case you won't get parallelism in the server; multiple MARS sessions
> within a connection are interleaved, not executed in parallel.
>
> --
> Pablo Castro
> Program Manager - ADO.NET Team
> Microsoft Corp.
>
> This posting is provided "AS IS" with no warranties, and confers no
rights.
>
>
> "Angel Saenz-Badillos[MS]" <angelsa@online.microsoft.com> wrote in message
> news:uJbeJ0FKFHA.1340@TK2MSFTNGP10.phx.gbl...
> > As long as both connections are to the same instance of Sql Server you
can
> > use sp_bindsession to get this behavior without having to use
distributed
> > transactions.
> >
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_sp_ba-bz_9ini.asp
> >
> > Hope this helps.
> > --
> > Angel Saenz-Badillos [MS] Managed Providers
> > This posting is provided "AS IS", with no warranties, and confers no
> > rights.Please do not send email directly to this alias.
> > This alias is for newsgroup purposes only.
> > I am now blogging about ADO.NET: http://weblogs.asp.net/angelsb/
> >
> >
> >
> >
> > "Dumitru Sbenghe" <sbenghe@yahoo.com> wrote in message
> > news:uyT4fXwJFHA.2752@TK2MSFTNGP10.phx.gbl...
> >> Given the current status of ADO.NET (version 1.1), you can not do what
> >> you
> >> want. Because the SqlClient provider permit only one command running on
a
> >> given connection at a time, the only solution will be a distributed
> >> transaction coordinator + 2 connections with 2 commands executed
> >> concurrently aka ES/COM+ in .NET . or wait until ADO.NET 2.0 will be
> >> released :), version which will permit this behavior.
> >>
> >>
> >>
> >> Dumitru
> >>
> >>
> >> "Shawn B." <leabre@html.com> wrote in message
> >> news:uA6kqFtJFHA.1096@tk2msftngp13.phx.gbl...
> >> > Greetings,
> >> >
> >> > I have two SqlCommands objects that each need to execute concurrently
> > but
> >> > I
> >> > want them both to be a part of the same transaction.
> >> >
> >> > What I'm doing is created one SqlCommand and Beginning a transaction.
> >> >
> >> > I have another SqlCommand that is being executed from within an
> >> > Asynchronous
> >> > delegate that needs to participate in the same transaction. The
> >> > problem
> >> > is
> >> > that I get the infamous exception stating that the connection is
> >> > already
> >> > in
> >> > use.
> >> >
> >> > COM+ is not an answer here.
> >> >
> >> > What I want to know is if there is a way to make this work correctly
> > using
> >> > only ADO.NET?
> >> >
> >> >
> >> > Thanks,
> >> > Shawn
> >> >
> >> >
> >>
> >>
> >
> >
>
>



Re: Concurrent Connections / Shared Transaction by Shawn

Shawn
Tue Mar 15 18:26:58 CST 2005

What do you mean by interleaved? Do you mean that one will execute and
complete and then the other command in the transaction will execute and
complete and then the next one, from a queue of some sort? versus executing
parallel?


Thanks,
Shawn


"Pablo Castro [MS]" <pablocas@online.microsoft.com> wrote in message
news:elFsi4OKFHA.1500@TK2MSFTNGP09.phx.gbl...
> Actually, bound sessions allow you to share the transaction space among
two
> connections but doesn't give you concurrent access to it. If you try to
> execute a batch on a connection while the other is actively doing
something
> within the transaction the server will return an error saying that the
> transaction context is in use.
>
> COM+ is the only solution I know of for this scenario. Even with COM+/DTC
> you'll see some serialization around the transaction. In ADO.NET 2.0 + SQL
> Server 2005 you can mix MARS plus asynchronous command execution to submit
> two requests concurrently within the same transaction; however, note that
in
> that case you won't get parallelism in the server; multiple MARS sessions
> within a connection are interleaved, not executed in parallel.
>
> --
> Pablo Castro
> Program Manager - ADO.NET Team
> Microsoft Corp.
>
> This posting is provided "AS IS" with no warranties, and confers no
rights.
>
>
> "Angel Saenz-Badillos[MS]" <angelsa@online.microsoft.com> wrote in message
> news:uJbeJ0FKFHA.1340@TK2MSFTNGP10.phx.gbl...
> > As long as both connections are to the same instance of Sql Server you
can
> > use sp_bindsession to get this behavior without having to use
distributed
> > transactions.
> >
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_sp_ba-bz_9ini.asp
> >
> > Hope this helps.
> > --
> > Angel Saenz-Badillos [MS] Managed Providers
> > This posting is provided "AS IS", with no warranties, and confers no
> > rights.Please do not send email directly to this alias.
> > This alias is for newsgroup purposes only.
> > I am now blogging about ADO.NET: http://weblogs.asp.net/angelsb/
> >
> >
> >
> >
> > "Dumitru Sbenghe" <sbenghe@yahoo.com> wrote in message
> > news:uyT4fXwJFHA.2752@TK2MSFTNGP10.phx.gbl...
> >> Given the current status of ADO.NET (version 1.1), you can not do what
> >> you
> >> want. Because the SqlClient provider permit only one command running on
a
> >> given connection at a time, the only solution will be a distributed
> >> transaction coordinator + 2 connections with 2 commands executed
> >> concurrently aka ES/COM+ in .NET . or wait until ADO.NET 2.0 will be
> >> released :), version which will permit this behavior.
> >>
> >>
> >>
> >> Dumitru
> >>
> >>
> >> "Shawn B." <leabre@html.com> wrote in message
> >> news:uA6kqFtJFHA.1096@tk2msftngp13.phx.gbl...
> >> > Greetings,
> >> >
> >> > I have two SqlCommands objects that each need to execute concurrently
> > but
> >> > I
> >> > want them both to be a part of the same transaction.
> >> >
> >> > What I'm doing is created one SqlCommand and Beginning a transaction.
> >> >
> >> > I have another SqlCommand that is being executed from within an
> >> > Asynchronous
> >> > delegate that needs to participate in the same transaction. The
> >> > problem
> >> > is
> >> > that I get the infamous exception stating that the connection is
> >> > already
> >> > in
> >> > use.
> >> >
> >> > COM+ is not an answer here.
> >> >
> >> > What I want to know is if there is a way to make this work correctly
> > using
> >> > only ADO.NET?
> >> >
> >> >
> >> > Thanks,
> >> > Shawn
> >> >
> >> >
> >>
> >>
> >
> >
>
>



Re: Concurrent Connections / Shared Transaction by Pablo

Pablo
Wed Mar 16 16:38:10 CST 2005

In MARS there are fixed interleave points in the server. For DML statements
(e.g. UPDATEs), the whole statement will run without yielding. For SELECT,
FETCH and a few other statements we'll yield on network writes so if we
return lots of rows you'll see intra-statement interleaving.

There is a great article on MARS here which includes more details on how
statements are interleaved:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnsql90/html/MARSinSQL05.asp

--
Pablo Castro
Program Manager - ADO.NET Team
Microsoft Corp.

This posting is provided "AS IS" with no warranties, and confers no rights.


"Shawn B." <leabre@html.com> wrote in message
news:uL8Xf7bKFHA.1528@TK2MSFTNGP09.phx.gbl...
> What do you mean by interleaved? Do you mean that one will execute and
> complete and then the other command in the transaction will execute and
> complete and then the next one, from a queue of some sort? versus
> executing
> parallel?
>
>
> Thanks,
> Shawn
>
>
> "Pablo Castro [MS]" <pablocas@online.microsoft.com> wrote in message
> news:elFsi4OKFHA.1500@TK2MSFTNGP09.phx.gbl...
>> Actually, bound sessions allow you to share the transaction space among
> two
>> connections but doesn't give you concurrent access to it. If you try to
>> execute a batch on a connection while the other is actively doing
> something
>> within the transaction the server will return an error saying that the
>> transaction context is in use.
>>
>> COM+ is the only solution I know of for this scenario. Even with COM+/DTC
>> you'll see some serialization around the transaction. In ADO.NET 2.0 +
>> SQL
>> Server 2005 you can mix MARS plus asynchronous command execution to
>> submit
>> two requests concurrently within the same transaction; however, note that
> in
>> that case you won't get parallelism in the server; multiple MARS sessions
>> within a connection are interleaved, not executed in parallel.
>>
>> --
>> Pablo Castro
>> Program Manager - ADO.NET Team
>> Microsoft Corp.
>>
>> This posting is provided "AS IS" with no warranties, and confers no
> rights.
>>
>>
>> "Angel Saenz-Badillos[MS]" <angelsa@online.microsoft.com> wrote in
>> message
>> news:uJbeJ0FKFHA.1340@TK2MSFTNGP10.phx.gbl...
>> > As long as both connections are to the same instance of Sql Server you
> can
>> > use sp_bindsession to get this behavior without having to use
> distributed
>> > transactions.
>> >
> http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_sp_ba-bz_9ini.asp
>> >
>> > Hope this helps.
>> > --
>> > Angel Saenz-Badillos [MS] Managed Providers
>> > This posting is provided "AS IS", with no warranties, and confers no
>> > rights.Please do not send email directly to this alias.
>> > This alias is for newsgroup purposes only.
>> > I am now blogging about ADO.NET: http://weblogs.asp.net/angelsb/
>> >
>> >
>> >
>> >
>> > "Dumitru Sbenghe" <sbenghe@yahoo.com> wrote in message
>> > news:uyT4fXwJFHA.2752@TK2MSFTNGP10.phx.gbl...
>> >> Given the current status of ADO.NET (version 1.1), you can not do what
>> >> you
>> >> want. Because the SqlClient provider permit only one command running
>> >> on
> a
>> >> given connection at a time, the only solution will be a distributed
>> >> transaction coordinator + 2 connections with 2 commands executed
>> >> concurrently aka ES/COM+ in .NET . or wait until ADO.NET 2.0 will be
>> >> released :), version which will permit this behavior.
>> >>
>> >>
>> >>
>> >> Dumitru
>> >>
>> >>
>> >> "Shawn B." <leabre@html.com> wrote in message
>> >> news:uA6kqFtJFHA.1096@tk2msftngp13.phx.gbl...
>> >> > Greetings,
>> >> >
>> >> > I have two SqlCommands objects that each need to execute
>> >> > concurrently
>> > but
>> >> > I
>> >> > want them both to be a part of the same transaction.
>> >> >
>> >> > What I'm doing is created one SqlCommand and Beginning a
>> >> > transaction.
>> >> >
>> >> > I have another SqlCommand that is being executed from within an
>> >> > Asynchronous
>> >> > delegate that needs to participate in the same transaction. The
>> >> > problem
>> >> > is
>> >> > that I get the infamous exception stating that the connection is
>> >> > already
>> >> > in
>> >> > use.
>> >> >
>> >> > COM+ is not an answer here.
>> >> >
>> >> > What I want to know is if there is a way to make this work correctly
>> > using
>> >> > only ADO.NET?
>> >> >
>> >> >
>> >> > Thanks,
>> >> > Shawn
>> >> >
>> >> >
>> >>
>> >>
>> >
>> >
>>
>>
>
>