<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	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/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Blog de Antonio Gago</title>
	<atom:link href="http://toniogago.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://toniogago.wordpress.com</link>
	<description>Información sobre Sistemas Informáticos</description>
	<lastBuildDate>Thu, 08 Dec 2011 23:54:38 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='toniogago.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://1.gravatar.com/blavatar/372951ec79cc7bc1ec5649970a7b5d2e?s=96&#038;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>Blog de Antonio Gago</title>
		<link>http://toniogago.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://toniogago.wordpress.com/osd.xml" title="Blog de Antonio Gago" />
	<atom:link rel='hub' href='http://toniogago.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Conjunto de datos (XSD) no se abre en modo diseño</title>
		<link>http://toniogago.wordpress.com/2011/05/13/conjunto-de-datos-xsd-no-se-abre-en-modo-diseno/</link>
		<comments>http://toniogago.wordpress.com/2011/05/13/conjunto-de-datos-xsd-no-se-abre-en-modo-diseno/#comments</comments>
		<pubDate>Fri, 13 May 2011 21:26:28 +0000</pubDate>
		<dc:creator>toniogago</dc:creator>
				<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://toniogago.wordpress.com/?p=233</guid>
		<description><![CDATA[Hace unos días me surgió un problema al diseñar un nuevo Conjunto de datos en Visual Studio (xsd). Cuando lo abría, me aparecía el código xml que se genera. Buscando en la web no encontré la solución. En muchas comentaban que había que utilizar la herramienta personalizada MsDataSetGenerator. En otras hablaban de problemas al generar [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=toniogago.wordpress.com&amp;blog=9792254&amp;post=233&amp;subd=toniogago&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Hace unos días me surgió un problema al diseñar un nuevo Conjunto de datos en Visual Studio (xsd). Cuando lo abría, me aparecía el código xml que se genera.</p>
<p>Buscando en la web no encontré la solución. En muchas comentaban que había que utilizar la herramienta personalizada MsDataSetGenerator. En otras hablaban de problemas al generar una nueva conexión a la base de datos. Para hacer la prueba intenté crear una nueva conexión y me falló. Entonces me dí cuenta que no tenía la ventana del explorador de servidores abierta. Intenté abrirla pero no pude.</p>
<p><span id="more-233"></span>Enfoqué la búsqueda con este nuevo problema que parecía tener relación con el diseño de los xsd.</p>
<p>La solución la encontré en <a href="http://www.ideascolectivas.com/visualstudio/visualstudio2008/habilitar-explorador-de-servidores-y-modo-diseno-de-dataset-en-visual-studio-2008">http://www.ideascolectivas.com/visualstudio/visualstudio2008/habilitar-explorador-de-servidores-y-modo-diseno-de-dataset-en-visual-studio-2008</a></p>
<p>En este blog relatan el problema tal cual me pasó a mi. La solución es ejecutar Visual Studio con un parámetro para reiniciar la configuración.</p>
<p><pre class="brush: plain;">
devenv.exe /resetsettings
</pre></p>
<p>En principio regenera la configuración inicial de Visual Studio. A mi no me funcionó fui a ver la fuente que ellos comentan: <a href="http://forums.asp.net/t/1227004.aspx/1?Server+Explorer+not+showing+up+on+Visual+Studio">http://forums.asp.net/t/1227004.aspx/1?Server+Explorer+not+showing+up+on+Visual+Studio</a></p>
<p>En este otro foro proponen además de <strong>/resetsettings</strong> el parámetro <strong>/setup</strong>, que &#8220;<em>requiere elevación</em>&#8221; como dice mi Windows 7. Para ello creé un acceso directo en el escritorio:</p>
<ul>
<li>Pulsa la tecla <strong>Windows</strong>. Te aparecerá el menú de Windows y un recuadro para <strong>buscar</strong>.</li>
<li>Tecleas en el recuadro <strong>devenv.exe</strong> (sin pulsar intro)</li>
<li> Botón derecho sobre devenv.exe y selecciona enviar a &#8211; escritorio (crear <strong>acceso directo</strong>)</li>
<li>En el escritorio modificar el acceso directo añadiendo al final del programa que se ejecuta el parámetro /setup o /resetsettings.</li>
<li>Ejecutar el acceso directo como administrador.</li>
</ul>
<p>Espero que os ayude,</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/toniogago.wordpress.com/233/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/toniogago.wordpress.com/233/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/toniogago.wordpress.com/233/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/toniogago.wordpress.com/233/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/toniogago.wordpress.com/233/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/toniogago.wordpress.com/233/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/toniogago.wordpress.com/233/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/toniogago.wordpress.com/233/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/toniogago.wordpress.com/233/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/toniogago.wordpress.com/233/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/toniogago.wordpress.com/233/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/toniogago.wordpress.com/233/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/toniogago.wordpress.com/233/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/toniogago.wordpress.com/233/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=toniogago.wordpress.com&amp;blog=9792254&amp;post=233&amp;subd=toniogago&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://toniogago.wordpress.com/2011/05/13/conjunto-de-datos-xsd-no-se-abre-en-modo-diseno/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/73f4895f5d4a8a2b86a17da3fbaa32ff?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">toniogago</media:title>
		</media:content>
	</item>
		<item>
		<title>Ya hay un DataReader abierto asociado a este comando, debe cerrarlo primero</title>
		<link>http://toniogago.wordpress.com/2010/12/31/ya-hay-un-datareader-abierto-asociado-a-este-comando-debe-cerrarlo-primero/</link>
		<comments>http://toniogago.wordpress.com/2010/12/31/ya-hay-un-datareader-abierto-asociado-a-este-comando-debe-cerrarlo-primero/#comments</comments>
		<pubDate>Fri, 31 Dec 2010 08:20:34 +0000</pubDate>
		<dc:creator>toniogago</dc:creator>
				<category><![CDATA[ASP.NET]]></category>

		<guid isPermaLink="false">http://toniogago.wordpress.com/?p=227</guid>
		<description><![CDATA[Normalmente lo que hago para leer una tabla es utilizar un objeto SQLDataReader. Me tiene pasado en alguna aplicación la necesidad de ejecutar un Update dentro del bucle de lectura. Al estar abierto el SQLDataReader salta el error &#8220;Ya hay un DataReader abierto asociado a este comando, debe cerrarlo primero&#8221;. Para solucionarlo empleo un objeto [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=toniogago.wordpress.com&amp;blog=9792254&amp;post=227&amp;subd=toniogago&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Normalmente lo que hago para leer una tabla es utilizar un objeto <strong>SQLDataReader</strong>. Me tiene pasado en alguna aplicación la necesidad de ejecutar un Update dentro del bucle de lectura. Al estar abierto el SQLDataReader salta el error &#8220;Ya hay un DataReader abierto asociado a este comando, debe cerrarlo primero&#8221;.</p>
<p><span id="more-227"></span>Para solucionarlo empleo un objeto <strong>DataTable</strong> que nos sirve igual que el DataReader. Un ejemplo de uso sería:</p>
<p><pre class="brush: vb;">
Dim Cmd As New SQLCommand(&quot;Select a, b, c, d from Tabla&quot;, Conexion)
Dim dt As New DataTable

dt.TableName = 'Tabla'
dt.Load(Cmd.ExecuteReader)

For Each Fila As DataRow In dt.Rows
'Ahora se puede utilizar una consulta SQL sin que dé el error del DataReader
Next


dt = Nothing
Cmd = Nothing

</pre></p>
<p>Espero que le sirva a alguien. Un saludo.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/toniogago.wordpress.com/227/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/toniogago.wordpress.com/227/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/toniogago.wordpress.com/227/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/toniogago.wordpress.com/227/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/toniogago.wordpress.com/227/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/toniogago.wordpress.com/227/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/toniogago.wordpress.com/227/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/toniogago.wordpress.com/227/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/toniogago.wordpress.com/227/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/toniogago.wordpress.com/227/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/toniogago.wordpress.com/227/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/toniogago.wordpress.com/227/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/toniogago.wordpress.com/227/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/toniogago.wordpress.com/227/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=toniogago.wordpress.com&amp;blog=9792254&amp;post=227&amp;subd=toniogago&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://toniogago.wordpress.com/2010/12/31/ya-hay-un-datareader-abierto-asociado-a-este-comando-debe-cerrarlo-primero/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/73f4895f5d4a8a2b86a17da3fbaa32ff?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">toniogago</media:title>
		</media:content>
	</item>
		<item>
		<title>Cambiar el idioma al control ReportViewer</title>
		<link>http://toniogago.wordpress.com/2010/12/04/cambiar-idioma-control-reportviewer/</link>
		<comments>http://toniogago.wordpress.com/2010/12/04/cambiar-idioma-control-reportviewer/#comments</comments>
		<pubDate>Fri, 03 Dec 2010 23:02:13 +0000</pubDate>
		<dc:creator>toniogago</dc:creator>
				<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[ReportViewer]]></category>
		<category><![CDATA[SSRS]]></category>

		<guid isPermaLink="false">http://toniogago.wordpress.com/?p=207</guid>
		<description><![CDATA[Si estás utilizando el control ReportViewer en una web ASP.NET, puede que los textos del control te aparezcan en inglés. Incluso si tienes que desarrollar una web para un idioma de una de nuestras comunidades (gallego, catalán, euskera&#8230;) el control ReportViewer lo podrás adaptar para que los textos aparezcan en el idioma que quieras. Cambiando [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=toniogago.wordpress.com&amp;blog=9792254&amp;post=207&amp;subd=toniogago&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Si estás utilizando el control ReportViewer en una web ASP.NET, puede que los textos del control te aparezcan en inglés. Incluso si tienes que desarrollar una web para un idioma de una de nuestras comunidades (gallego, catalán, euskera&#8230;) el control ReportViewer lo podrás adaptar para que los textos aparezcan en el idioma que quieras.</p>
<p>Cambiando la cultura de la página (UICulture=&#8221;es-ES&#8221; Culture=&#8221;es-ES&#8221;) no me funcionó. Tampoco otras soluciones que proponen algunos foros. Todos relacionados con la cultura y globalización. Al acceder a la página de Reporting Services (http://servidor/reports) los mensajes me aparecen en castellano, pero en mi página que tiene el control ReportViewer (tengo instalado el 2008 SP1 en castellano) seguía en inglés.</p>
<p>Después de buscar y buscar por la web en encontré una solución que me funcionó: implementar la clase <em>Microsoft.Reporting.WebForms.IReportViewerMessages</em> con una clase. Esta clase hay que crearla en una carpeta especial denominada <strong>App_Code</strong>. </p>
<p><span id="more-207"></span>Para que el control ReportViewer utilice la clase, hay que crear una variable en el archivo <strong>web.config</strong>, en el grupo <strong>appSettings</strong>.</p>
<p><code>&lt;add key="ReportViewerMessages" value="MensajesReportViewer.ES, App_Code"/&gt;</code></p>
<p><em>MensajesReportViewer </em>es el nombre del NameSpace y <em>ES</em> es el nombre de la clase. Si te da miedo tocar el archivo web.config podrás crear la variable desde el <strong>Administrador IIS</strong>: Seleccionas la aplicación con el botón derecho y eliges <strong>propiedades</strong>. En la pestaña <strong>ASP.NET</strong> pulsas el botón <strong>Editar configuración</strong>. Aparecerá una ventana en la que agregarás en <i>Configuración de la aplicación</i></p>
<p><a href="http://toniogago.files.wordpress.com/2010/12/aspnet.png"><img src="http://toniogago.files.wordpress.com/2010/12/aspnet.png?w=300&#038;h=257" alt="" title="ASPNET" width="300" height="257" class="aligncenter size-medium wp-image-219" border="0" /></a></p>
<p>El código de la clase es el siguiente:</p>
<p><pre class="brush: vb;">
Imports Microsoft.VisualBasic
Namespace RVM
Public Class MiCultura
             Implements Microsoft.Reporting.WebForms.IReportViewerMessages
Public ReadOnly Property BackButtonToolTip() As String Implements Microsoft.Reporting.WebForms.IReportViewerMessages.BackButtonToolTip
  Get
    Return &quot;Atrás&quot;
  End Get
End Property

Public ReadOnly Property ChangeCredentialsText() As String Implements Microsoft.Reporting.WebForms.IReportViewerMessages.ChangeCredentialsText
  Get
    Return &quot;Cambiar Credenciales&quot;
  End Get
End Property

Public ReadOnly Property ChangeCredentialsToolTip() As String Implements Microsoft.Reporting.WebForms.IReportViewerMessages.ChangeCredentialsToolTip
  Get
    Return &quot;Cambiar Credenciales&quot;
  End Get
End Property

Public ReadOnly Property CurrentPageTextBoxToolTip() As String Implements Microsoft.Reporting.WebForms.IReportViewerMessages.CurrentPageTextBoxToolTip
  Get
    Return &quot;Página actual&quot;
  End Get
End Property

Public ReadOnly Property DocumentMap() As String Implements Microsoft.Reporting.WebForms.IReportViewerMessages.DocumentMap
  Get
    Return &quot;Mapa&quot;
  End Get
End Property

Public ReadOnly Property DocumentMapButtonToolTip() As String Implements Microsoft.Reporting.WebForms.IReportViewerMessages.DocumentMapButtonToolTip
  Get
    Return &quot;Mapa del documento&quot;
  End Get
End Property

Public ReadOnly Property ExportButtonText() As String Implements Microsoft.Reporting.WebForms.IReportViewerMessages.ExportButtonText
  Get
    Return &quot;Exportar&quot;
  End Get
End Property

Public ReadOnly Property ExportButtonToolTip() As String Implements Microsoft.Reporting.WebForms.IReportViewerMessages.ExportButtonToolTip
  Get
    Return &quot;Exportar&quot;
  End Get
End Property

Public ReadOnly Property ExportFormatsToolTip() As String Implements Microsoft.Reporting.WebForms.IReportViewerMessages.ExportFormatsToolTip
  Get
    Return &quot;Formatos de exportación&quot;
  End Get
End Property

Public ReadOnly Property FalseValueText() As String Implements Microsoft.Reporting.WebForms.IReportViewerMessages.FalseValueText
  Get
    Return &quot;Falso&quot;
  End Get
End Property

Public ReadOnly Property FindButtonText() As String Implements Microsoft.Reporting.WebForms.IReportViewerMessages.FindButtonText
  Get
    Return &quot;Buscar&quot;
  End Get
End Property

Public ReadOnly Property FindButtonToolTip() As String Implements Microsoft.Reporting.WebForms.IReportViewerMessages.FindButtonToolTip
  Get
    Return &quot;Buscar&quot;
  End Get
End Property

Public ReadOnly Property FindNextButtonText() As String Implements Microsoft.Reporting.WebForms.IReportViewerMessages.FindNextButtonText
  Get
    Return &quot;Siguiente&quot;
  End Get
End Property

Public ReadOnly Property FindNextButtonToolTip() As String Implements Microsoft.Reporting.WebForms.IReportViewerMessages.FindNextButtonToolTip
  Get
    Return &quot;Siguiente&quot;
  End Get
End Property

Public ReadOnly Property FirstPageButtonToolTip() As String Implements Microsoft.Reporting.WebForms.IReportViewerMessages.FirstPageButtonToolTip
  Get
    Return &quot;Primera página&quot;
  End Get
End Property

Public ReadOnly Property InvalidPageNumber() As String Implements Microsoft.Reporting.WebForms.IReportViewerMessages.InvalidPageNumber
  Get
    Return &quot;Página no válida&quot;
  End Get
End Property

Public ReadOnly Property LastPageButtonToolTip() As String Implements Microsoft.Reporting.WebForms.IReportViewerMessages.LastPageButtonToolTip
  Get
    Return &quot;Última página&quot;
  End Get
End Property

Public ReadOnly Property NextPageButtonToolTip() As String Implements Microsoft.Reporting.WebForms.IReportViewerMessages.NextPageButtonToolTip
  Get
    Return &quot;Siguiente página&quot;
  End Get
End Property

Public ReadOnly Property NoMoreMatches() As String Implements Microsoft.Reporting.WebForms.IReportViewerMessages.NoMoreMatches
  Get
    Return &quot;No se encuentran más coincidencias&quot;
  End Get
End Property

Public ReadOnly Property NullCheckBoxText() As String Implements Microsoft.Reporting.WebForms.IReportViewerMessages.NullCheckBoxText
  Get
    Return &quot;Nulo&quot;
  End Get
End Property

Public ReadOnly Property NullValueText() As String Implements Microsoft.Reporting.WebForms.IReportViewerMessages.NullValueText
  Get
    Return &quot;Nulo&quot;
  End Get
End Property

Public ReadOnly Property PageOf() As String Implements Microsoft.Reporting.WebForms.IReportViewerMessages.PageOf
  Get
    Return &quot;de&quot;
  End Get
End Property

Public ReadOnly Property ParameterAreaButtonToolTip() As String Implements Microsoft.Reporting.WebForms.IReportViewerMessages.ParameterAreaButtonToolTip
  Get
    Return &quot;Mostrar u ocultar parámetros&quot;
  End Get
End Property

Public ReadOnly Property PasswordPrompt() As String Implements Microsoft.Reporting.WebForms.IReportViewerMessages.PasswordPrompt
  Get
    Return &quot;Contraseña&quot;
  End Get
End Property

Public ReadOnly Property PreviousPageButtonToolTip() As String Implements Microsoft.Reporting.WebForms.IReportViewerMessages.PreviousPageButtonToolTip
  Get
    Return &quot;Página anterior&quot;
  End Get
End Property

Public ReadOnly Property PrintButtonToolTip() As String Implements Microsoft.Reporting.WebForms.IReportViewerMessages.PrintButtonToolTip
  Get
    Return &quot;Imprimir&quot;
  End Get
End Property

Public ReadOnly Property ProgressText() As String Implements Microsoft.Reporting.WebForms.IReportViewerMessages.ProgressText
  Get
    Return &quot;El informe se está generando&quot;
  End Get
End Property

Public ReadOnly Property RefreshButtonToolTip() As String Implements Microsoft.Reporting.WebForms.IReportViewerMessages.RefreshButtonToolTip
  Get
    Return &quot;Actualizar&quot;
  End Get
End Property

Public ReadOnly Property SearchTextBoxToolTip() As String Implements Microsoft.Reporting.WebForms.IReportViewerMessages.SearchTextBoxToolTip
  Get
    Return &quot;Buscar texto&quot;
  End Get
End Property

Public ReadOnly Property SelectAll() As String Implements Microsoft.Reporting.WebForms.IReportViewerMessages.SelectAll
  Get
    Return &quot;(Seleccionar Todo)&quot;
  End Get
End Property

Public ReadOnly Property SelectAValue() As String Implements Microsoft.Reporting.WebForms.IReportViewerMessages.SelectAValue
  Get
    Return &quot;&lt;Seleccione un valor&gt;&quot;
  End Get
End Property

Public ReadOnly Property SelectFormat() As String Implements Microsoft.Reporting.WebForms.IReportViewerMessages.SelectFormat
  Get
    Return &quot;Seleccionar un formato&quot;
  End Get
End Property

Public ReadOnly Property TextNotFound() As String Implements Microsoft.Reporting.WebForms.IReportViewerMessages.TextNotFound
  Get
    Return &quot;Texto no encontrado&quot;
  End Get
End Property

Public ReadOnly Property TodayIs() As String Implements Microsoft.Reporting.WebForms.IReportViewerMessages.TodayIs
  Get
    Return &quot;Hoy es&quot;
  End Get
End Property

Public ReadOnly Property TrueValueText() As String Implements Microsoft.Reporting.WebForms.IReportViewerMessages.TrueValueText
  Get
    Return &quot;Verdadero&quot;
  End Get
End Property

Public ReadOnly Property UserNamePrompt() As String Implements Microsoft.Reporting.WebForms.IReportViewerMessages.UserNamePrompt
  Get
    Return &quot;Usuario&quot;
  End Get
End Property

Public ReadOnly Property ViewReportButtonText1() As String Implements Microsoft.Reporting.WebForms.IReportViewerMessages.ViewReportButtonText
  Get
    Return &quot;Ver informe&quot;
  End Get
End Property

Public ReadOnly Property ZoomControlToolTip() As String Implements Microsoft.Reporting.WebForms.IReportViewerMessages.ZoomControlToolTip
  Get
    Return &quot;Zoom&quot;
  End Get
End Property

Public ReadOnly Property ZoomToPageWidth() As String Implements Microsoft.Reporting.WebForms.IReportViewerMessages.ZoomToPageWidth
  Get
    Return &quot;Ancho de página&quot;
  End Get
End Property

Public ReadOnly Property ZoomToWholePage() As String Implements Microsoft.Reporting.WebForms.IReportViewerMessages.ZoomToWholePage
  Get
    Return &quot;Toda la página&quot;
  End Get
End Property
End Class
End Namespace
</pre></p>
<p>Yo utilizo <strong>Visual Studio 2008</strong> y facilita enormemente la tarea ya que al teclear <em>Implements</em> y la clase, al pulsar intro, él sólo introduce casi todo el código. Sólo hay que ir rellenando las propiedades con el <em>Return</em> correspondiente.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/toniogago.wordpress.com/207/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/toniogago.wordpress.com/207/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/toniogago.wordpress.com/207/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/toniogago.wordpress.com/207/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/toniogago.wordpress.com/207/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/toniogago.wordpress.com/207/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/toniogago.wordpress.com/207/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/toniogago.wordpress.com/207/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/toniogago.wordpress.com/207/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/toniogago.wordpress.com/207/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/toniogago.wordpress.com/207/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/toniogago.wordpress.com/207/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/toniogago.wordpress.com/207/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/toniogago.wordpress.com/207/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=toniogago.wordpress.com&amp;blog=9792254&amp;post=207&amp;subd=toniogago&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://toniogago.wordpress.com/2010/12/04/cambiar-idioma-control-reportviewer/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/73f4895f5d4a8a2b86a17da3fbaa32ff?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">toniogago</media:title>
		</media:content>

		<media:content url="http://toniogago.files.wordpress.com/2010/12/aspnet.png?w=300" medium="image">
			<media:title type="html">ASPNET</media:title>
		</media:content>
	</item>
		<item>
		<title>Solución a “Licencia ha expirado” de Photoshop CS3</title>
		<link>http://toniogago.wordpress.com/2010/04/01/solucion-a-%e2%80%9clicencia-ha-expirado%e2%80%9d-de-photoshop-cs3/</link>
		<comments>http://toniogago.wordpress.com/2010/04/01/solucion-a-%e2%80%9clicencia-ha-expirado%e2%80%9d-de-photoshop-cs3/#comments</comments>
		<pubDate>Thu, 01 Apr 2010 17:40:50 +0000</pubDate>
		<dc:creator>toniogago</dc:creator>
				<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://toniogago.wordpress.com/2010/04/01/solucion-a-%e2%80%9clicencia-ha-expirado%e2%80%9d-de-photoshop-cs3</guid>
		<description><![CDATA[Si ya tenemos instalado el Photoshop CS3 y hasta ahora nos funcionaba perfectamente, sólo tenemos que borrar la caché del programa. Para ello nos vamos al directorio C:\Program Files\Common Files\Adobe\Adobe PCD\cache y borramos el archivo cache.db Problema resuelto.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=toniogago.wordpress.com&amp;blog=9792254&amp;post=200&amp;subd=toniogago&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div id="msgcns!7DD5AA5D155D092!167" class="bvMsg">
<div style="float:left;margin-right:10px;"><img title="PhotoshopCS3" alt="" src="http://dptoti.files.wordpress.com/2010/03/photoshopcs3.png?w=34&#038;h=33" width="34" height="33" /></div>
<div style="float:left;">Si ya tenemos instalado el Photoshop CS3 y hasta ahora nos funcionaba perfectamente, sólo tenemos que borrar la <strong>caché</strong> del programa. </p>
<p>Para ello nos vamos al directorio C:\Program Files\Common Files\Adobe\Adobe PCD\cache y borramos el archivo cache.db</p>
<p>Problema resuelto.</p>
</div>
<div style="clear:both;"></div>
</div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/toniogago.wordpress.com/200/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/toniogago.wordpress.com/200/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/toniogago.wordpress.com/200/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/toniogago.wordpress.com/200/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/toniogago.wordpress.com/200/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/toniogago.wordpress.com/200/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/toniogago.wordpress.com/200/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/toniogago.wordpress.com/200/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/toniogago.wordpress.com/200/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/toniogago.wordpress.com/200/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/toniogago.wordpress.com/200/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/toniogago.wordpress.com/200/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/toniogago.wordpress.com/200/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/toniogago.wordpress.com/200/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=toniogago.wordpress.com&amp;blog=9792254&amp;post=200&amp;subd=toniogago&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://toniogago.wordpress.com/2010/04/01/solucion-a-%e2%80%9clicencia-ha-expirado%e2%80%9d-de-photoshop-cs3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/73f4895f5d4a8a2b86a17da3fbaa32ff?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">toniogago</media:title>
		</media:content>

		<media:content url="http://dptoti.files.wordpress.com/2010/03/photoshopcs3.png" medium="image">
			<media:title type="html">PhotoshopCS3</media:title>
		</media:content>
	</item>
		<item>
		<title>Instalar Windows XP en un disco SATA sin Disquetera (F6)</title>
		<link>http://toniogago.wordpress.com/2010/03/18/instalar-windows-xp-en-un-disco-sata-sin-disquetera-f6/</link>
		<comments>http://toniogago.wordpress.com/2010/03/18/instalar-windows-xp-en-un-disco-sata-sin-disquetera-f6/#comments</comments>
		<pubDate>Thu, 18 Mar 2010 21:06:16 +0000</pubDate>
		<dc:creator>toniogago</dc:creator>
				<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://toniogago.wordpress.com/2010/03/18/instalar-windows-xp-en-un-disco-sata-sin-disquetera-f6</guid>
		<description><![CDATA[Los discos duros SATA empiezan a tener más apreciación tendiendo a sustituir a los IDE debido al incremento de velocidad que ofrecen. Los fabricantes de placas base empiezan a implemenar el standar de hace años, cuando la tecnología era joven y cara. Ahora como los precios de los discos SATA han bajado a niveles donde [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=toniogago.wordpress.com&amp;blog=9792254&amp;post=201&amp;subd=toniogago&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div id="msgcns!7DD5AA5D155D092!164" class="bvMsg">
<p>Los discos duros <strong>SATA </strong>empiezan a tener más apreciación tendiendo a sustituir a los IDE debido al incremento de velocidad que ofrecen. Los fabricantes de placas base empiezan a implemenar el standar de hace años, cuando la tecnología era joven y cara. Ahora como los precios de los discos SATA han bajado a niveles donde cualquiera puede decidir si elige un disco SATA o un <strong>IDE</strong>, se ha observado una gran migración de los usuarios comunes de ordenador.</p>
<p>Estos eligen instalar Windows y aplicaciones en discos SATA porque proporciona más velocidad que determina que el sistema vaya más ligero. Por ello para aquellos que tengan placas base antiguas con soporte SATA, necesitan un paso extra si intentan instalar Windows XP. Windows XP no proporciona drivers para todas las controladoras SATA, para estos casos, durante el procedimiento de instalación, el usuario debe insertar un disquete con los drivers que vienen con la placa.</p>
<p>No es un gran esfuerzo, pero lo gracioso es que un gran número de gente no tiene disqueteras. Bajo estas circunstancias, sin disquete no se puede instalar Windows XP en un disco SATA (en algunas placas). El resultado? La instalación simplemente no dectectará del disco SATA.</p>
<p>Aquí os presento un método para evitar este inconveniente con un truco.</p>
<p><span id="more-201"></span>Vayamos poco a poco. Tenemos un problema estrictamente de driver porque el driver SATA que necesitamos no viene con el paquete de instalación de Windows XP. Qué pasa si nosotros añadimos del driver por nuestra cuenta antes de instalar Windows?</p>
<h3><strong>Ingredientes:</strong></h3>
<ul>
<li>El CD original de instalación de Windows XP</li>
<li>Una aplicación Freeware llamada <a title="Nlite" href="http://www.softpedia.com/get/System/OS-Enhancements/nLite.shtml"><span style="color:#0066cc;">Nlite</span></a></li>
<li>Un CD en blanco</li>
<li>Además necesitamos los drivers de la controladora SATA proporcionada por el fabricante. En caso de no encontrar ningún disquete de la placa o no puedes localizarlo en el CD de la placa, puedes consultar la web del fabricante para bajar la última versión.</li>
</ul>
<h3><strong>Proceso:</strong></h3>
<p>Primero descarga el driver y descomprímelo en una carpeta. Luego descarga e instala la aplicación <strong>Nlite</strong>.</p>
<p><a href="http://dptoti.files.wordpress.com/2010/02/nlite01.png"><img title="Nlite01" src="http://dptoti.files.wordpress.com/2010/02/nlite01.png?w=300&#038;h=237&#038;h=237" alt="" width="300" height="237" /></a></p>
<p>Cuando inicies Nlite te preguntará sobre el CD de instalación de Windows XP. Inserta un CD original. Pulsar Siguiente y empezará la copia.</p>
<p><a href="http://dptoti.files.wordpress.com/2010/02/nlite02.png"><img title="Nlite02" src="http://dptoti.files.wordpress.com/2010/02/nlite02.png?w=300&#038;h=237&#038;h=237" alt="" width="300" height="237" /></a></p>
<p>Para insertar los drivers SATA en el paquete de instalación necesitarás tenerlo salvado en el disco duro. Cuando te aparezca una ventana de aviso pulsa <strong>OK </strong>y selecciona la carpeta de destino donde se van a guardar los archivos.</p>
<p><a href="http://dptoti.files.wordpress.com/2010/02/nlite03.png"><img title="Nlite03" src="http://dptoti.files.wordpress.com/2010/02/nlite03.png?w=300&#038;h=237&#038;h=237" alt="" width="300" height="237" /></a></p>
<p>Ahora pulsa <strong>Siguiente</strong> dos veces hasta que veas una ventana donde te aparezcan unas opciones ordenadas en 4 categorías: Integrar, Borrar, Configurar, Crear.</p>
<p><a href="http://dptoti.files.wordpress.com/2010/02/nlite05.png"><img title="Nlite05" src="http://dptoti.files.wordpress.com/2010/02/nlite05.png?w=300&#038;h=237&#038;h=237" alt="" width="300" height="237" /></a></p>
<p>Estamos interesados en el procedimiento de integración, entonces seleccionde el botón <strong>Integrar Controladores</strong> y pulsa <strong>Siguiente</strong>. En el siguiente menu pulsa <strong>Insertar </strong>y selecciona “Carpeta de múltiples controladores” en el menú desplegable. Esta opción te permite buscar la carpeta donde descargastes el driver.</p>
<p><a href="http://dptoti.files.wordpress.com/2010/02/nlite06.png"><img title="Nlite06" src="http://dptoti.files.wordpress.com/2010/02/nlite06.png?w=300&#038;h=237&#038;h=237" alt="" width="300" height="237" /></a></p>
<p>Selecciona la carpeta correspondiente y pulsa <strong>Siguiente</strong>.</p>
<p><a href="http://dptoti.files.wordpress.com/2010/02/nlite07.png"><img title="Nlite07" src="http://dptoti.files.wordpress.com/2010/02/nlite07.png?w=300&#038;h=266&#038;h=266" alt="" width="300" height="266" /></a></p>
<p>Obtendrás una lista de drivers disponibles (en el caso de que haya más de uno) o simplemente un driver.</p>
<p><a href="http://dptoti.files.wordpress.com/2010/02/nlite08.png"><img title="Nlite08" src="http://dptoti.files.wordpress.com/2010/02/nlite08.png?w=300&#038;h=290&#038;h=290" alt="" width="300" height="290" /></a></p>
<p>Selecciónalos y pulsa <strong>Siguiente</strong>.</p>
<p><a href="http://dptoti.files.wordpress.com/2010/02/nlite09.png"><img title="Nlite09" src="http://dptoti.files.wordpress.com/2010/02/nlite09.png?w=300&#038;h=237&#038;h=237" alt="" width="300" height="237" /></a></p>
<p>Ahora la aplicación nos preguntará si queremos iniciar el procedimiento de integración. Elegir <strong>Si</strong> y esperar a que los drivers se integren en el paquete de instalación.</p>
<p><a href="http://dptoti.files.wordpress.com/2010/02/nlite10.png"><img title="Nlite10" src="http://dptoti.files.wordpress.com/2010/02/nlite10.png?w=300&#038;h=237&#038;h=237" alt="" width="300" height="237" /></a></p>
<p>Con el driver de marras incluído en el CD de instalación, ahora puedes instalar Windows XP en tu disco SATA … pero … el paquete de instalación está en el disco duro. Necesitas un CD Autoarrancable primero para iniciar la instalación. No te preocupes, una vez que la instalación haya sido adornada con los drivers que el usuario necesite, se podrá transformar en una imagen de disco autoarrancable y luego grabarla en CD. Para encapsular la instalación en una imagen ISO utilizamos la misma aplicación Nlite.</p>
<p>Abre el <strong>Nlite</strong>. Asegúrate de seleccionar la carpeta de instalación y pulsa Next. Selecciona la <strong>Ultima Sesión</strong> y pulsa <strong>Siguiente</strong> otra vez. Ahora desde el menú de opciones elige <strong>Crear ISO Autoarrancable</strong> y pulsa <strong>Siguiente</strong>.</p>
<p><a href="http://dptoti.files.wordpress.com/2010/02/nlite11.png"><img title="Nlite11" src="http://dptoti.files.wordpress.com/2010/02/nlite11.png?w=300&#038;h=237&#038;h=237" alt="" width="300" height="237" /></a></p>
<p>En la siguiente ventana asegúrate de que el modo esté marcado como <strong>Crear Imagen</strong> y pulsa <strong>Crear ISO</strong>. La imagen ISO se grabará en la carpeta que queramos. Una vez que el proceso de grabación de imagen finalice podrás grabarlo en un CD con cualquier grabador de CD</p>
<p><a href="http://dptoti.files.wordpress.com/2010/02/nlite12.png"><img title="Nlite12" src="http://dptoti.files.wordpress.com/2010/02/nlite12.png?w=300&#038;h=237&#038;h=237" alt="" width="300" height="237" /></a></p>
<p>Lo he probado en un <strong>Toshiba Tecra M9</strong> (<strong>PTM91E</strong>) y funcionó.</p>
<h3><strong>Enlaces:</strong></h3>
<p>Este post lo he traducido de una página de <a href="http://news.softpedia.com/news/Install-Windows-XP-On-SATA-Without-a-Floppy-F6-47807.shtml"><span style="color:#0066cc;">Softpedia</span></a> escrita por <strong>Dragos Jijau</strong>.</p>
</div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/toniogago.wordpress.com/201/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/toniogago.wordpress.com/201/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/toniogago.wordpress.com/201/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/toniogago.wordpress.com/201/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/toniogago.wordpress.com/201/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/toniogago.wordpress.com/201/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/toniogago.wordpress.com/201/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/toniogago.wordpress.com/201/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/toniogago.wordpress.com/201/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/toniogago.wordpress.com/201/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/toniogago.wordpress.com/201/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/toniogago.wordpress.com/201/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/toniogago.wordpress.com/201/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/toniogago.wordpress.com/201/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=toniogago.wordpress.com&amp;blog=9792254&amp;post=201&amp;subd=toniogago&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://toniogago.wordpress.com/2010/03/18/instalar-windows-xp-en-un-disco-sata-sin-disquetera-f6/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/73f4895f5d4a8a2b86a17da3fbaa32ff?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">toniogago</media:title>
		</media:content>

		<media:content url="http://dptoti.files.wordpress.com/2010/02/nlite01.png?w=300&#038;h=237" medium="image">
			<media:title type="html">Nlite01</media:title>
		</media:content>

		<media:content url="http://dptoti.files.wordpress.com/2010/02/nlite02.png?w=300&#038;h=237" medium="image">
			<media:title type="html">Nlite02</media:title>
		</media:content>

		<media:content url="http://dptoti.files.wordpress.com/2010/02/nlite03.png?w=300&#038;h=237" medium="image">
			<media:title type="html">Nlite03</media:title>
		</media:content>

		<media:content url="http://dptoti.files.wordpress.com/2010/02/nlite05.png?w=300&#038;h=237" medium="image">
			<media:title type="html">Nlite05</media:title>
		</media:content>

		<media:content url="http://dptoti.files.wordpress.com/2010/02/nlite06.png?w=300&#038;h=237" medium="image">
			<media:title type="html">Nlite06</media:title>
		</media:content>

		<media:content url="http://dptoti.files.wordpress.com/2010/02/nlite07.png?w=300&#038;h=266" medium="image">
			<media:title type="html">Nlite07</media:title>
		</media:content>

		<media:content url="http://dptoti.files.wordpress.com/2010/02/nlite08.png?w=300&#038;h=290" medium="image">
			<media:title type="html">Nlite08</media:title>
		</media:content>

		<media:content url="http://dptoti.files.wordpress.com/2010/02/nlite09.png?w=300&#038;h=237" medium="image">
			<media:title type="html">Nlite09</media:title>
		</media:content>

		<media:content url="http://dptoti.files.wordpress.com/2010/02/nlite10.png?w=300&#038;h=237" medium="image">
			<media:title type="html">Nlite10</media:title>
		</media:content>

		<media:content url="http://dptoti.files.wordpress.com/2010/02/nlite11.png?w=300&#038;h=237" medium="image">
			<media:title type="html">Nlite11</media:title>
		</media:content>

		<media:content url="http://dptoti.files.wordpress.com/2010/02/nlite12.png?w=300&#038;h=237" medium="image">
			<media:title type="html">Nlite12</media:title>
		</media:content>
	</item>
		<item>
		<title>Realizar un proceso Batch con ASP.NET</title>
		<link>http://toniogago.wordpress.com/2010/03/15/realizar-un-proceso-batch-con-asp-net-2/</link>
		<comments>http://toniogago.wordpress.com/2010/03/15/realizar-un-proceso-batch-con-asp-net-2/#comments</comments>
		<pubDate>Mon, 15 Mar 2010 19:43:34 +0000</pubDate>
		<dc:creator>toniogago</dc:creator>
				<category><![CDATA[ASP.NET]]></category>

		<guid isPermaLink="false">http://toniogago.wordpress.com/2010/03/15/realizar-un-proceso-batch-con-asp-net-2</guid>
		<description><![CDATA[En algunas aplicaciones web necesitamos realizar procesos que pueden durar bastante tiempo y la página nos devuelve un error de TimeOut. Estos procesos se suelen denominar batch o por lotes.   Pongamos un ejemplo Protected Sub CmdIniciar_Click(ByVal Sender As Object, ByVal e as System.EventArgs) Handles CmdIniciar.Click   &#8216;Espera 91 segundos. Por defecto ASP.NET el TimeOut [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=toniogago.wordpress.com&amp;blog=9792254&amp;post=199&amp;subd=toniogago&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div id="msgcns!7DD5AA5D155D092!163" class="bvMsg">
<div>En algunas aplicaciones web necesitamos realizar procesos que pueden durar bastante tiempo y la página nos devuelve un error de <strong>TimeOut</strong>. Estos procesos se suelen denominar <strong>batch</strong> o por lotes.</div>
<div> </div>
<h3>Pongamos un ejemplo</h3>
<blockquote style="margin-right:0;">
<div><span style="font-family:Courier New;">Protected Sub CmdIniciar_Click(ByVal Sender As Object, ByVal e as System.EventArgs) Handles CmdIniciar.Click</span></div>
<div><span style="font-family:Courier New;"> <span style="color:#4f6128;"> &#8216;Espera 91 segundos. Por defecto ASP.NET el TimeOut son 90 S.</span></span></div>
<div><span style="font-family:Courier New;">  Thread.Sleep(91000) </span></div>
<div><span style="font-family:Courier New;">  <span style="color:#4f6128;">&#8216;Para utilizar Thread debe estar importado System.Threading</span></span></div>
<div><span style="font-family:Courier New;">End Sub</span></div>
</blockquote>
<div>En este caso si el TimeOut está en 90 segundos, la página nos devolverá un error.</div>
<div> </div>
<p><span id="more-199"></span><br />
<h3>El proceso Batch</h3>
<div>Para solucionarlo he utilizado un <strong>ThreadStart</strong> y un <strong>Thread </strong>de la siguiente forma:</div>
<blockquote style="margin-right:0;">
<div><span style="font-family:Courier New;">Protected Sub CmdIniciar_Click(ByVal Sender As Object, ByVal e as System.EventArgs) Handles CmdIniciar.Click </span></div>
<div><span style="font-family:Courier New;">   Dim ts as ThreadStart = New ThreadStart(AddressOf Calcula) </span></div>
<div><span style="font-family:Courier New;">   Dim Trabajo as Thread = New Thread(ts) </span></div>
<div><span style="font-family:Courier New;">   Trabajo.Start() </span></div>
<div><span style="font-family:Courier New;">End Sub </span></div>
<div><span style="font-family:Courier New;">Private Sub Espera() </span></div>
<div><span style="font-family:Courier New;">   Thread.Sleep(91000) </span></div>
<div><span style="font-family:Courier New;">End Sub</span></div>
</blockquote>
<div>El problema que tengo ahora es que no sé si el proceso batch termina correctamente ya que se ejecuta como un proceso aparte y el usuario no se entera.</div>
<div><strong></strong> </div>
<h3>Clases compatidas</h3>
<div>La solución a este segundo problema la solventé con una clase compartida. Se pueden crear clases reutilizables guardándolas en una carpeta denominada <em>App_Code</em>. Al crear un nuevo elemento en el proyecto de tipo clase, Visual Studio nos avisa de ello:</div>
<div> </div>
<div> <a href="http://toniogago.files.wordpress.com/2009/12/claseapp_code.png"><img src="http://toniogago.files.wordpress.com/2009/12/claseapp_code.png?w=300&#038;h=63" border="0" alt="Nueva clase en App_Code" width="300" height="63" /></a></div>
<div> </div>
<div>Podeis encontrar más información en <a href="http://msdn.microsoft.com/es-es/library/we4hy2z9(VS.80).aspx">Microsoft</a>. El código de la clase sería:</div>
<blockquote style="margin-right:0;">
<div><span style="font-family:Courier New;">Public Class TrabajoBatch Private Shared _Procesando As Boolean = False </span></div>
<div><span style="font-family:Courier New;">   Private Shared _Mensaje As String = &#8220;&#8221; </span></div>
<div><span style="font-family:Courier New;">   Public Shared ReadOnly Property Procesando() As Boolean </span></div>
<div><span style="font-family:Courier New;">      Get Return _Procesando </span></div>
<div><span style="font-family:Courier New;">      End Get End </span></div>
<div><span style="font-family:Courier New;">   Property Public Shared Property Mensaje() As String </span></div>
<div><span style="font-family:Courier New;">      Get </span></div>
<div><span style="font-family:Courier New;">         Mensaje = _Mensaje </span></div>
<div><span style="font-family:Courier New;">      End Get</span></div>
<div><span style="font-family:Courier New;">      Set(ByVal value As String) </span></div>
<div><span style="font-family:Courier New;">         _Mensaje = value </span></div>
<div><span style="font-family:Courier New;">      End Set </span></div>
<div><span style="font-family:Courier New;">   End Property </span></div>
<div><span style="font-family:Courier New;">   Public Shared Sub Procesar() </span></div>
<div><span style="font-family:Courier New;">      _Procesando = True </span></div>
<div><span style="font-family:Courier New;">      _Mensaje = &#8220;&#8221; </span></div>
<div><span style="font-family:Courier New;">   End Sub </span></div>
<div><span style="font-family:Courier New;">   Public Shared Sub Terminado() </span></div>
<div><span style="font-family:Courier New;">      _Procesando = False </span></div>
<div><span style="font-family:Courier New;">      _Mensaje = &#8220;&#8221; </span></div>
<div><span style="font-family:Courier New;">   End Sub </span></div>
<div><span style="font-family:Courier New;">End Class</span></div>
</blockquote>
<div>Ahora podemos modificar la página con el siguiente código:</div>
<blockquote style="margin-right:0;">
<div><span style="font-family:Courier New;">Protected Sub CmdIniciar_Click(ByVal Sender As Object, ByVal e as Private Sub Espera() </span></div>
<div><span style="font-family:Courier New;">   TrabajoBatch.Procesar() </span></div>
<div><span style="font-family:Courier New;">   Thread.Sleep(91000) </span></div>
<div><span style="font-family:Courier New;">   TrabajoBatch.Terminado() </span></div>
<div><span style="font-family:Courier New;">End Sub</span></div>
</blockquote>
<div>Añadimos a la página un control timer y una etiqueta para comprobar cada cierto tiempo el estado del trabajo, y en el evento <strong>Tick</strong> ponemos lo siguiente: </div>
<blockquote style="margin-right:0;">
<div><span style="font-family:Courier New;">Protected Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick </span></div>
<div><span style="font-family:Courier New;">   lblTexto.Text = TrabajoBatch.Mensaje </span></div>
<div><span style="font-family:Courier New;">End Sub</span></div>
</blockquote>
<div>Como el control <strong>timer</strong> genera un <strong>Postback</strong>, tendremos que poner en el evento <em>Page_Load</em> lo siguiente:</div>
<blockquote style="margin-right:0;">
<div><span style="font-family:Courier New;">Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load </span></div>
<div><span style="font-family:Courier New;">   If Not IsPostBack Then </span></div>
<div><span style="font-family:Courier New;">      Timer1.Interval = 1000 </span></div>
<div><span style="font-family:Courier New;">      Timer1.Enabled = False </span></div>
<div><span style="font-family:Courier New;">   End If </span></div>
<div><span style="font-family:Courier New;">   If TrabajoBatch.Procesando Then </span></div>
<div><span style="font-family:Courier New;">      CmdIniciar.Enabled = False </span></div>
<div><span style="font-family:Courier New;">      Timer1.Enabled = True </span></div>
<div><span style="font-family:Courier New;">   Else </span></div>
<div><span style="font-family:Courier New;">      CmdIniciar.Enable = True </span></div>
<div><span style="font-family:Courier New;">      Timer1.Enabled = False </span></div>
<div><span style="font-family:Courier New;">   End If </span></div>
<div><span style="font-family:Courier New;">End Sub</span></div>
</blockquote>
<div>Tal como lo tenemos ahora, el usuario pulsará el botón Iniciar y el proceso en batch empezará deshabilitando el botón hasta que termine. Hay que tener cuidado en el proceso e intentar capturar los posibles fallos ya que si esto ocurre el usuario tendrá la impresión que el trabajo no termina.</div>
<div>Un saludo</div>
</div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/toniogago.wordpress.com/199/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/toniogago.wordpress.com/199/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/toniogago.wordpress.com/199/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/toniogago.wordpress.com/199/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/toniogago.wordpress.com/199/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/toniogago.wordpress.com/199/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/toniogago.wordpress.com/199/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/toniogago.wordpress.com/199/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/toniogago.wordpress.com/199/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/toniogago.wordpress.com/199/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/toniogago.wordpress.com/199/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/toniogago.wordpress.com/199/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/toniogago.wordpress.com/199/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/toniogago.wordpress.com/199/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=toniogago.wordpress.com&amp;blog=9792254&amp;post=199&amp;subd=toniogago&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://toniogago.wordpress.com/2010/03/15/realizar-un-proceso-batch-con-asp-net-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/73f4895f5d4a8a2b86a17da3fbaa32ff?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">toniogago</media:title>
		</media:content>

		<media:content url="http://toniogago.files.wordpress.com/2009/12/claseapp_code.png?w=300" medium="image">
			<media:title type="html">Nueva clase en App_Code</media:title>
		</media:content>
	</item>
		<item>
		<title>Integrar Oracle BIEE con Active Directory (2)</title>
		<link>http://toniogago.wordpress.com/2010/02/24/integrar-oracle-biee-con-active-directory-2/</link>
		<comments>http://toniogago.wordpress.com/2010/02/24/integrar-oracle-biee-con-active-directory-2/#comments</comments>
		<pubDate>Wed, 24 Feb 2010 13:14:32 +0000</pubDate>
		<dc:creator>toniogago</dc:creator>
				<category><![CDATA[BI Oracle]]></category>
		<category><![CDATA[adsi]]></category>
		<category><![CDATA[Oracle BIEE]]></category>

		<guid isPermaLink="false">http://toniogago.wordpress.com/?p=171</guid>
		<description><![CDATA[En el directorio activo hay varios campos que podemos utilizar para asignar a variables del servidor de Oracle y poder utilizarlas en las consultas. Se pueden utilizar la mayor parte de atributos que se suelen utilizar en VBScript, como pueden ser: displayName, mail, company, department, mobile, etc. La dirección de donde extraje la información es [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=toniogago.wordpress.com&amp;blog=9792254&amp;post=171&amp;subd=toniogago&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>En el directorio activo hay varios campos que podemos utilizar para asignar a variables del servidor de Oracle y poder utilizarlas en las consultas. Se pueden utilizar la mayor parte de atributos que se suelen utilizar en VBScript, como pueden ser: displayName, mail, company, department, mobile, etc.<br />
<span id="more-171"></span><br />
La dirección de donde extraje la información es Esta: <a href="http://www.computerperformance.co.uk/Logon/LDAP_attributes_active_directory.htm">http://www.computerperformance.co.uk/Logon/LDAP_attributes_active_directory.htm</a></p>
<p>como se indica en la página, para averiguar los atributos de LDAP que se pueden utilizar, basta con ejecutar el comando CSVDE -f Exportfile.csv y abrir el archivo que se genera (Exportfile.csv)</p>
<h4>Active Directory</h4>
<p>Editamos el usuario que se va a conectar al Oracle BIEE y en el campo de Departamento, por ejemplo, introducimos los valores que queramos separados por el símbolo punto y coma.</p>
<h4>Configurar el Administrador de BIEE</h4>
<p>En la herramienta de adminstración creamos un script de inicialización con los siguientse valores:</p>
<ul>
<li><strong>Name</strong>: Nombre del script</li>
<li><strong>Data source</strong>: El <strong>Servidor LDAP</strong> que creamos en el post anterior.</li>
<li>Podemos marcar la casilla <strong>Required for authentication</strong> para que se ejecute obligatoriamente en la validación de los usuarios</li>
<li><strong>Variable target</strong>: Pulsar el botón Edit Data Target para crear las variables que vamos a necesitar:
<ul>
<li><strong><span style="text-decoration:underline;">USER</span></strong>: para el login del usuario. Asociarlo a la propiedad <strong>sAMAccountName</strong>.</li>
<li><strong><span style="text-decoration:underline;">DISPLAYNAME</span></strong>: El nombre completo. Asociarlo a la propiedad <strong>displayName</strong>.</li>
<li><strong><span style="text-decoration:underline;">GROUP</span></strong>: El o los grupos. Asociarlo a la propiedad <strong>department</strong>.</li>
</ul>
</li>
</ul>
<p>Podemos probar si funciona pulsando el botón test. Se abre una ventana donde nos pide usuario y contraseña y si todo está bien nos presentará el contenido de las variables.</p>
<h4>Posts relacionados:</h4>
<ul>
<li><a href="http://toniogago.wordpress.com/2010/01/28/integrar-oracle-biee-con-active-directory/">Integrar Oracle BIEE con Active directory</a></li>
<li><a title="Foro Oracle Bussines Inteligence de Adiante" href="http://www.oraclebi.adiante.es/trucos-f1/integracion-obi-con-adsi-t2.htm">Foro OBI Adiante</a></li>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/toniogago.wordpress.com/171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/toniogago.wordpress.com/171/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/toniogago.wordpress.com/171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/toniogago.wordpress.com/171/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/toniogago.wordpress.com/171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/toniogago.wordpress.com/171/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/toniogago.wordpress.com/171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/toniogago.wordpress.com/171/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/toniogago.wordpress.com/171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/toniogago.wordpress.com/171/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/toniogago.wordpress.com/171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/toniogago.wordpress.com/171/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/toniogago.wordpress.com/171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/toniogago.wordpress.com/171/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=toniogago.wordpress.com&amp;blog=9792254&amp;post=171&amp;subd=toniogago&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://toniogago.wordpress.com/2010/02/24/integrar-oracle-biee-con-active-directory-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/73f4895f5d4a8a2b86a17da3fbaa32ff?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">toniogago</media:title>
		</media:content>
	</item>
		<item>
		<title>Integrar Oracle BIEE con Active Directory</title>
		<link>http://toniogago.wordpress.com/2010/01/28/integrar-oracle-biee-con-active-directory/</link>
		<comments>http://toniogago.wordpress.com/2010/01/28/integrar-oracle-biee-con-active-directory/#comments</comments>
		<pubDate>Thu, 28 Jan 2010 21:03:47 +0000</pubDate>
		<dc:creator>toniogago</dc:creator>
				<category><![CDATA[BI Oracle]]></category>
		<category><![CDATA[adsi]]></category>
		<category><![CDATA[ldap]]></category>
		<category><![CDATA[Oracle BIEE]]></category>

		<guid isPermaLink="false">http://toniogago.wordpress.com/?p=160</guid>
		<description><![CDATA[Integrar el Active Directory con Orable Business Inteligence Enterprise Edition.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=toniogago.wordpress.com&amp;blog=9792254&amp;post=160&amp;subd=toniogago&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Desde <strong>BIEE </strong>podemos conectarnos al servidor del dominio que tenga el <strong>Active Directory </strong>(<strong>ADSI</strong>) para validar los usuarios. A través de las variables de sistema, podremos introducir valores automáticamente en aquellas que nos interese como puede ser el código de usuario, descripción, etc. En el caso de variables del ADSI que devuelvan un Array no se podrá trabajar con ellas. En este casó están los grupos a los que el usuario pertenece. Pero podremos arreglarlo de otra manera.</p>
<p><span id="more-160"></span><b>Servidor LDAP</b><br />
Primero vamos a conectar el BIEE con el Active Directory. Para ello desde la herramienta de Administración crearemos un servidor <strong>LDAP</strong>.<br />
Una vez abierto el repositorio (normalmente el que está online), en el menú Manage, seleccionamos Security. Creamos un nuevo servidor LDAP.</p>
<p><img src="http://toniogago.files.wordpress.com/2010/01/ldap01.png?w=500" alt="Servidor LDAP" title="Servidor LDAP - General"   class="alignnone size-full wp-image-173" /></p>
<ul>
<li>Name: Le damos un nombre a la conexión</li>
<li>Host name: especificamos el nombre del servidor que aloja el Active Directory</li>
<li>Port number: por defecto el puerto de Active Directory es el 389</li>
<li>Base DN: Es la ruta donde va a buscar el usuario. Normalmente es CN=Users,dc=dominio</li>
<li>Bind DN: Es el nombre de usuari con el que nos vamos a conectar. Si no funciona el test (botón Test connection) puede que haya que añadir al usuario el texto @dominio con el nombre del dominio completo.</li>
<li>Bind Password: es la contraseña del usuario en el Active Directory</li>
</ul>
<p>Para comprobar que los datos son correctos podemos pulsar el botón Test connection.</p>
<p>En la ficha Advanced poner en Domain identifier el nombre completo del dominio. Marcar ADSI para indicar que es un Active Directory. Pulsar el botón aceptar y el servidor LDAP ya se crea.</p>
<p><img src="http://toniogago.files.wordpress.com/2010/01/ldap02.png?w=500" alt="Servidor LDAP" title="Servidor LDAP - Avanzado"   class="alignnone size-full wp-image-175" /></p>
<p>Ahora si todo está bien configurado, cuando un usuario acceda al servidor podrá utilizar el usuario y contraseña con el que accede normalmente. El nombre del usuario no tiene que llevar delante el dominio al que pertenece ya que el servidor LDAP va a ir a buscarlo al dominio que está configurado.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/toniogago.wordpress.com/160/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/toniogago.wordpress.com/160/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/toniogago.wordpress.com/160/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/toniogago.wordpress.com/160/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/toniogago.wordpress.com/160/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/toniogago.wordpress.com/160/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/toniogago.wordpress.com/160/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/toniogago.wordpress.com/160/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/toniogago.wordpress.com/160/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/toniogago.wordpress.com/160/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/toniogago.wordpress.com/160/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/toniogago.wordpress.com/160/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/toniogago.wordpress.com/160/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/toniogago.wordpress.com/160/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=toniogago.wordpress.com&amp;blog=9792254&amp;post=160&amp;subd=toniogago&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://toniogago.wordpress.com/2010/01/28/integrar-oracle-biee-con-active-directory/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/73f4895f5d4a8a2b86a17da3fbaa32ff?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">toniogago</media:title>
		</media:content>

		<media:content url="http://toniogago.files.wordpress.com/2010/01/ldap01.png" medium="image">
			<media:title type="html">Servidor LDAP - General</media:title>
		</media:content>

		<media:content url="http://toniogago.files.wordpress.com/2010/01/ldap02.png" medium="image">
			<media:title type="html">Servidor LDAP - Avanzado</media:title>
		</media:content>
	</item>
		<item>
		<title>Realizar un proceso batch con asp.net</title>
		<link>http://toniogago.wordpress.com/2009/12/15/realizar-un-proceso-batch-con-asp-net/</link>
		<comments>http://toniogago.wordpress.com/2009/12/15/realizar-un-proceso-batch-con-asp-net/#comments</comments>
		<pubDate>Tue, 15 Dec 2009 07:59:38 +0000</pubDate>
		<dc:creator>toniogago</dc:creator>
				<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[batch]]></category>

		<guid isPermaLink="false">http://toniogago.wordpress.com/?p=144</guid>
		<description><![CDATA[Con ThreadStart y Thread podemos realizar procesos largos en páginas ASP.NET<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=toniogago.wordpress.com&amp;blog=9792254&amp;post=144&amp;subd=toniogago&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>
En algunas aplicaciones web necesitamos realizar procesos que pueden durar bastante tiempo y la página nos devuelve un error de <strong>TimeOut</strong>. Estos procesos se suelen denominar <strong>batch</strong> o por lotes.</p>
<p><strong>Pongamos un ejemplo</strong><br />
<pre class="brush: vb;">
Protected Sub CmdIniciar_Click(ByVal Sender As Object, ByVal e as System.EventArgs) Handles CmdIniciar.Click
    'Espera 91 segundos. Por defecto ASP.NET el TimeOut son 90 S.
    Thread.Sleep(91000)
    'Para utilizar Thread debe estar importado System.Threading
End Sub
</pre><br />
<span id="more-144"></span><br />
En este caso si el TimeOut está en 90 segundos, la página nos devolverá un error.</p>
<p><strong>El proceso Batch</strong><br />
Para solucionarlo he utilizado un <strong>ThreadStart</strong> y un <strong>Thread </strong>de la siguiente forma:<br />
<pre class="brush: vb;">
Protected Sub CmdIniciar_Click(ByVal Sender As Object, ByVal e as System.EventArgs) Handles CmdIniciar.Click
    Dim ts as ThreadStart = New ThreadStart(AddressOf Espera)
    Dim Trabajo as Thread = New Thread(ts)
    Trabajo.Start()
End Sub
Private Sub Espera()
    Thread.Sleep(91000)
End Sub
</pre></p>
<p>El problema que tengo ahora es que no sé si el proceso batch termina correctamente ya que se ejecuta como un proceso aparte y el usuario no se entera.</p>
<p><strong>Clases compatidas</strong><br />
La solución a este segundo problema la solventé con una clase compartida. Se pueden crear clases reutilizables guardándolas en una carpeta denominada <em>App_Code</em>. Al crear un nuevo elemento en el proyecto de tipo clase, Visual Studio nos avisa de ello:</p>
<p><a href="http://toniogago.files.wordpress.com/2009/12/claseapp_code.png"><img src="http://toniogago.files.wordpress.com/2009/12/claseapp_code.png?w=300&#038;h=63" alt="Nueva clase en App_Code" width="300" height="63" border="0" /></a></p>
<p>Podeis encontrar más información en <a href="http://msdn.microsoft.com/es-es/library/we4hy2z9(VS.80).aspx">Microsoft</a>.</p>
<p>El código de la clase sería:</p>
<p><pre class="brush: vb;">
Public Class TrabajoBatch
    Private Shared _Procesando As Boolean = False
    Private Shared _Mensaje As String = &quot;&quot;
    Public Shared ReadOnly Property Procesando() As Boolean
        Get
            Return _Procesando
        End Get
    End Property
    Public Shared Property Mensaje() As String
        Get
            Mensaje = _Mensaje
        End Get
        Set(ByVal value As String)
            _Mensaje = value
        End Set
    End Property
    Public Shared Sub Procesar()
        _Procesando = True
        _Mensaje = &quot;&quot;
    End Sub
    Public Shared Sub Terminado()
        _Procesando = False
        _Mensaje = &quot;&quot;
    End Sub
End Class
</pre></p>
<p>Ahora podemos modificar la página con el siguiente código:</p>
<p><pre class="brush: vb;">
Protected Sub CmdIniciar_Click(ByVal Sender As Object, ByVal e As System.EventArgs) Handles CmdIniciar.Click
        Dim ts As ThreadStart = New ThreadStart(AddressOf Espera)
        Dim workerThread As Thread = New Thread(ts)
        workerThread.Start()
End sub
Private Sub Espera()
    TrabajoBatch.Procesar()
    TrabajoBatch.Mensaje = &quot;Trabajo iniciado.&quot;
    Thread.Sleep(91000)
    TrabajoBatch.Terminado()
    TrabajoBatch.Mensaje = &quot;Finalizado.&quot;
End Sub
</pre></p>
<p>Añadimos a la página un control timer y una etiqueta para comprobar cada cierto tiempo el estado del trabajo, y en el evento <strong>Tick</strong> ponemos lo siguiente:<br />
<pre class="brush: vb;">
    Protected Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        lblTexto.Text = TrabajoBatch.Mensaje
    End Sub
</pre><br />
Como el control <strong>timer</strong> genera un <strong>Postback</strong>, tendremos que poner en el evento <em>Page_Load</em> lo siguiente:<br />
<pre class="brush: vb;">
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Not IsPostBack Then
            Timer1.Interval = 1000
            Timer1.Enabled = False
        End If
        If TrabajoBatch.Procesando Then
            CmdIniciar.Enabled = False
            Timer1.Enabled = True
        Else
            CmdIniciar.Enable = True
            Timer1.Enabled = False
        End If
    End Sub
</pre><br />
Tal como lo tenemos ahora, el usuario pulsará el botón Iniciar y el proceso en batch empezará deshabilitando el botón hasta que termine.<br />
Hay que tener cuidado en el proceso e intentar capturar los posibles fallos ya que si esto ocurre el usuario tendrá la impresión que el trabajo no termina.<br />
<br />
Un saludo</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/toniogago.wordpress.com/144/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/toniogago.wordpress.com/144/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/toniogago.wordpress.com/144/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/toniogago.wordpress.com/144/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/toniogago.wordpress.com/144/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/toniogago.wordpress.com/144/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/toniogago.wordpress.com/144/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/toniogago.wordpress.com/144/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/toniogago.wordpress.com/144/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/toniogago.wordpress.com/144/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/toniogago.wordpress.com/144/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/toniogago.wordpress.com/144/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/toniogago.wordpress.com/144/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/toniogago.wordpress.com/144/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=toniogago.wordpress.com&amp;blog=9792254&amp;post=144&amp;subd=toniogago&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://toniogago.wordpress.com/2009/12/15/realizar-un-proceso-batch-con-asp-net/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/73f4895f5d4a8a2b86a17da3fbaa32ff?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">toniogago</media:title>
		</media:content>

		<media:content url="http://toniogago.files.wordpress.com/2009/12/claseapp_code.png?w=300" medium="image">
			<media:title type="html">Nueva clase en App_Code</media:title>
		</media:content>
	</item>
		<item>
		<title>Leer cadenas de conexión de web.config</title>
		<link>http://toniogago.wordpress.com/2009/12/10/leer-cadenas-de-conexion-de-web-config/</link>
		<comments>http://toniogago.wordpress.com/2009/12/10/leer-cadenas-de-conexion-de-web-config/#comments</comments>
		<pubDate>Thu, 10 Dec 2009 17:56:49 +0000</pubDate>
		<dc:creator>toniogago</dc:creator>
				<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[ConnectionString]]></category>

		<guid isPermaLink="false">http://toniogago.wordpress.com/?p=129</guid>
		<description><![CDATA[Web.config En el archivo de configuración de un sitio web (web.config) están las cadenas de conexión que se pudieron haber guardado al realizar la configuración de un control SQLDataSource. Desde el código de Visual Basic o C# podemos acceder a la cadena de conexión con el método SqlDataSource1.ConnectionString. ConnectionString Hasta hace poco en mis páginas, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=toniogago.wordpress.com&amp;blog=9792254&amp;post=129&amp;subd=toniogago&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>Web.config</strong><br />
En el archivo de configuración de un sitio web (web.config) están las <strong>cadenas de conexión </strong>que se pudieron haber guardado al realizar la configuración de un control <strong>SQLDataSource</strong>.</p>
<p><span id="more-129"></span><a href="http://toniogago.files.wordpress.com/2009/12/connectionstring.png"><img src="http://toniogago.files.wordpress.com/2009/12/connectionstring.png?w=300&#038;h=232" alt="" title="ConnectionString" width="300" height="232" class="alignnone size-medium wp-image-130" border="0" /></a></p>
<p>Desde el código de Visual Basic o C# podemos acceder a la cadena de conexión con el método <code>SqlDataSource1.ConnectionString</code>.</p>
<p><strong>ConnectionString</strong><br />
Hasta hace poco en mis páginas, cuando necesitaba acceder a la base de datos por algún motivo, lo que hacía era insertar un control SQLDataSource sólo para obtener esa cadena de conexión. Pero descubrí que también podemos acceder a dicha cadena si la tenemos guardada en el archivo web.config.</p>
<p>Para ello basta con teclear lo siguiente:<br />
<pre class="brush: vb;">
Dim Cnn as SqlConnection
Cnn = New SqlConnection
Cnn.ConnectionString = ConfigurationManager.ConnectionStrings(&quot;NombreConexión&quot;).ToString
</pre><br />
O bien en una sola línea:<br />
<pre class="brush: vb;">
Dim Cnn as New SqlConnection (ConfigurationManager.ConnectionStrings(&quot;NombreConexión&quot;).ToString)
</pre></p>
<p>De esta forma evitamos sobrecargar la página con controles.</p>
<p>un saludo.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/toniogago.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/toniogago.wordpress.com/129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/toniogago.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/toniogago.wordpress.com/129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/toniogago.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/toniogago.wordpress.com/129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/toniogago.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/toniogago.wordpress.com/129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/toniogago.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/toniogago.wordpress.com/129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/toniogago.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/toniogago.wordpress.com/129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/toniogago.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/toniogago.wordpress.com/129/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=toniogago.wordpress.com&amp;blog=9792254&amp;post=129&amp;subd=toniogago&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://toniogago.wordpress.com/2009/12/10/leer-cadenas-de-conexion-de-web-config/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/73f4895f5d4a8a2b86a17da3fbaa32ff?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">toniogago</media:title>
		</media:content>

		<media:content url="http://toniogago.files.wordpress.com/2009/12/connectionstring.png?w=300" medium="image">
			<media:title type="html">ConnectionString</media:title>
		</media:content>
	</item>
	</channel>
</rss>
