<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: TableAdapters Transaccionales sin usar TransactionScope</title>
	<atom:link href="http://www.miguelmatas.es/blog/2008/09/04/tableadapters-transaccionales-sin-usar-transactionscope/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.miguelmatas.es/blog/2008/09/04/tableadapters-transaccionales-sin-usar-transactionscope/</link>
	<description>Ingeniería de Software, Gestión de Proyectos, Programación, BPM, Arquitectura de Software, .NET, J2EE</description>
	<lastBuildDate>Wed, 01 Feb 2012 15:39:10 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
	<item>
		<title>By: Juan</title>
		<link>http://www.miguelmatas.es/blog/2008/09/04/tableadapters-transaccionales-sin-usar-transactionscope/comment-page-1/#comment-1266</link>
		<dc:creator>Juan</dc:creator>
		<pubDate>Thu, 18 Mar 2010 12:12:09 +0000</pubDate>
		<guid isPermaLink="false">http://www.miguelmatas.es/blog/?p=277#comment-1266</guid>
		<description>Y a todo esto ...

¿ Me sabéis responder porqué los DataAdapters, por defecto, tienen una conexión diferente ? ¿ No sería más cómodo por defecto, compartir la misma conexión, y el que lo desee o así quiera para un caso concreto, establecer una conexión distinta para ese DataAdapter ?

A veces me da la impresión que todas estas cosas nos hacen trabajar más de lo que debiéramos. Vamos si en 1000 bombillas hay 1 apagada y 999 encendidas , ¿ qué es más facil ?
a) Memorizar la que está apagada.
b) Memorizar las 999 que están encendidas.

Pues con todo esto del .NET me parece en ocasiones se nos obliga a memorizar las 999 que están encendidas, en vez de la que estaba apagada como se hacía y se hace en otros lenguajes.</description>
		<content:encoded><![CDATA[<p>Y a todo esto &#8230;</p>
<p>¿ Me sabéis responder porqué los DataAdapters, por defecto, tienen una conexión diferente ? ¿ No sería más cómodo por defecto, compartir la misma conexión, y el que lo desee o así quiera para un caso concreto, establecer una conexión distinta para ese DataAdapter ?</p>
<p>A veces me da la impresión que todas estas cosas nos hacen trabajar más de lo que debiéramos. Vamos si en 1000 bombillas hay 1 apagada y 999 encendidas , ¿ qué es más facil ?<br />
a) Memorizar la que está apagada.<br />
b) Memorizar las 999 que están encendidas.</p>
<p>Pues con todo esto del .NET me parece en ocasiones se nos obliga a memorizar las 999 que están encendidas, en vez de la que estaba apagada como se hacía y se hace en otros lenguajes.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Juan</title>
		<link>http://www.miguelmatas.es/blog/2008/09/04/tableadapters-transaccionales-sin-usar-transactionscope/comment-page-1/#comment-1265</link>
		<dc:creator>Juan</dc:creator>
		<pubDate>Thu, 18 Mar 2010 12:05:19 +0000</pubDate>
		<guid isPermaLink="false">http://www.miguelmatas.es/blog/?p=277#comment-1265</guid>
		<description>Jarid, así lo hago yo.
Extracto del código de mi aplicación:

        Try
            If (TAQuery.Connection.State = ConnectionState.Closed) Then
                TAQuery.Connection.Open()
            End If

            TATechInfo.Connection = TAQuery.Connection
            TAUnitConversor.Connection = TAQuery.Connection

            TAQuery.Transaction = TAQuery.Connection.BeginTransaction()
            TATechInfo.Transaction = TAQuery.Transaction
            TAUnitConversor.Transaction = TAQuery.Transaction

            &#039;Hago lo que sea

            TAQuery.Transaction.Commit()
        Catch ex As Exception
            TAQuery.Transaction.Rollback()
            MessageBox.Show(ex.Message, &quot;Error&quot;, MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try


Aunque sería mejor usar el patrón de diseño Factoría o Envelope, y de esta forma crearse una clase con la que inicializar y asignar las transacciones, de los DataAdapters implicados.

Pienso en algo que deje el código de arriba en esto:

        Try
            mitransaccion = MiFactoria.BeginTrans(TA1, TA2, ...)
            &#039; Hago lo que sea
            mitransaccion.Commit()
        Catch ex As Exception
            mitransaccion.Rollback()
            MessageBox.Show(ex.Message, &quot;Error&quot;, MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try

Esto es algo que no tengo implementado, pero me pondré a ello porque me hará la vida más cómoda y con menos código, que con esto de .NET parece que vamos para atrás. En vez de facilitarnos la vida, las nuevas librerías nos hacen escribir más...

¡¡¡ Con lo fácil que era todo esto en ADO o con los TDataSet de Delphi ...!!!</description>
		<content:encoded><![CDATA[<p>Jarid, así lo hago yo.<br />
Extracto del código de mi aplicación:</p>
<p>        Try<br />
            If (TAQuery.Connection.State = ConnectionState.Closed) Then<br />
                TAQuery.Connection.Open()<br />
            End If</p>
<p>            TATechInfo.Connection = TAQuery.Connection<br />
            TAUnitConversor.Connection = TAQuery.Connection</p>
<p>            TAQuery.Transaction = TAQuery.Connection.BeginTransaction()<br />
            TATechInfo.Transaction = TAQuery.Transaction<br />
            TAUnitConversor.Transaction = TAQuery.Transaction</p>
<p>            &#8216;Hago lo que sea</p>
<p>            TAQuery.Transaction.Commit()<br />
        Catch ex As Exception<br />
            TAQuery.Transaction.Rollback()<br />
            MessageBox.Show(ex.Message, &#8220;Error&#8221;, MessageBoxButtons.OK, MessageBoxIcon.Error)<br />
        End Try</p>
<p>Aunque sería mejor usar el patrón de diseño Factoría o Envelope, y de esta forma crearse una clase con la que inicializar y asignar las transacciones, de los DataAdapters implicados.</p>
<p>Pienso en algo que deje el código de arriba en esto:</p>
<p>        Try<br />
            mitransaccion = MiFactoria.BeginTrans(TA1, TA2, &#8230;)<br />
            &#8216; Hago lo que sea<br />
            mitransaccion.Commit()<br />
        Catch ex As Exception<br />
            mitransaccion.Rollback()<br />
            MessageBox.Show(ex.Message, &#8220;Error&#8221;, MessageBoxButtons.OK, MessageBoxIcon.Error)<br />
        End Try</p>
<p>Esto es algo que no tengo implementado, pero me pondré a ello porque me hará la vida más cómoda y con menos código, que con esto de .NET parece que vamos para atrás. En vez de facilitarnos la vida, las nuevas librerías nos hacen escribir más&#8230;</p>
<p>¡¡¡ Con lo fácil que era todo esto en ADO o con los TDataSet de Delphi &#8230;!!!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jarid</title>
		<link>http://www.miguelmatas.es/blog/2008/09/04/tableadapters-transaccionales-sin-usar-transactionscope/comment-page-1/#comment-1143</link>
		<dc:creator>Jarid</dc:creator>
		<pubDate>Wed, 25 Mar 2009 14:41:05 +0000</pubDate>
		<guid isPermaLink="false">http://www.miguelmatas.es/blog/?p=277#comment-1143</guid>
		<description>Es muy buen artículo y lo estoy probando, pero tengo una duda, en la parte en la parte donde asignas la transaccion:

// le pasamos a los adaptadores la transacción que acabamos de crear
adapterMarca.Transaction = tran;
adapterCoche.Transaction = tran;

los tableadapters no tienen la propiedad Transaction q mencionas. No se podría hacer mejor  

adapterMarca.Connection.BeginTransaction()??</description>
		<content:encoded><![CDATA[<p>Es muy buen artículo y lo estoy probando, pero tengo una duda, en la parte en la parte donde asignas la transaccion:</p>
<p>// le pasamos a los adaptadores la transacción que acabamos de crear<br />
adapterMarca.Transaction = tran;<br />
adapterCoche.Transaction = tran;</p>
<p>los tableadapters no tienen la propiedad Transaction q mencionas. No se podría hacer mejor  </p>
<p>adapterMarca.Connection.BeginTransaction()??</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: César</title>
		<link>http://www.miguelmatas.es/blog/2008/09/04/tableadapters-transaccionales-sin-usar-transactionscope/comment-page-1/#comment-1108</link>
		<dc:creator>César</dc:creator>
		<pubDate>Fri, 12 Sep 2008 19:37:00 +0000</pubDate>
		<guid isPermaLink="false">http://www.miguelmatas.es/blog/?p=277#comment-1108</guid>
		<description>Interesante, pero en el escenario que planteas, ¿por qué se ha de cambiar a &quot;public&quot; la propiedad &quot;ConnectionModifier&quot;?

Por defecto es &quot;internal&quot;, suficiente para el ejemplo y también para escenarios de assemblies-DAL que encapsulen el acceso a datos (normalmente los TableAdapters no se exponen hacia fuera del assembly).

¿No?

PD: He llegado a tu blog a través de búsquedas de información sobre Agile Point.</description>
		<content:encoded><![CDATA[<p>Interesante, pero en el escenario que planteas, ¿por qué se ha de cambiar a &#8220;public&#8221; la propiedad &#8220;ConnectionModifier&#8221;?</p>
<p>Por defecto es &#8220;internal&#8221;, suficiente para el ejemplo y también para escenarios de assemblies-DAL que encapsulen el acceso a datos (normalmente los TableAdapters no se exponen hacia fuera del assembly).</p>
<p>¿No?</p>
<p>PD: He llegado a tu blog a través de búsquedas de información sobre Agile Point.</p>
]]></content:encoded>
	</item>
</channel>
</rss>

