<?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"
	>

<channel>
	<title>Blog de .NET - FinderIT</title>
	<atom:link href="http://blog.finderit.com/net/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.finderit.com/net</link>
	<description>Programación .NET</description>
	<pubDate>Sun, 22 Mar 2009 19:07:31 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<item>
		<title>Formulario con Forma (Form Form) en VB.NET</title>
		<link>http://blog.finderit.com/net/2009/03/22/formulario-con-forma-form-form-en-vbnet/</link>
		<comments>http://blog.finderit.com/net/2009/03/22/formulario-con-forma-form-form-en-vbnet/#comments</comments>
		<pubDate>Sun, 22 Mar 2009 19:07:31 +0000</pubDate>
		<dc:creator>gabi</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.finderit.com/net/?p=102</guid>
		<description><![CDATA[


 
Bueno, el otro día leí un articulo sobre el espacio de nombre Drawing y me di cuenta que con este espacio de nombre podría lograr muchas cosas para la apariencia en mi aplicaciones y una de ellas es darle forma (redonda, ovalada), fin la que se nos antoje. En este caso yo probé dándole una [...]]]></description>
			<content:encoded><![CDATA[<table id="Contenido_plantilla_1_1_table5" border="0" cellspacing="0" cellpadding="0" width="649">
<tbody>
<tr>
<td width="4"> </td>
<td class="txt11px_GreenBold" colspan="5" width="641">Bueno, el otro día leí un articulo sobre el espacio de nombre Drawing y me di cuenta que con este espacio de nombre podría lograr muchas cosas para la apariencia en mi aplicaciones y una de ellas es darle forma (redonda, ovalada), fin la que se nos antoje. En este caso yo probé dándole una forma redonda.</td>
<td width="4"> </td>
</tr>
<tr>
<td colspan="7" height="6"> </td>
</tr>
<tr>
<td width="4"> </td>
<td colspan="4" width="478"> </td>
<td width="4"> </td>
</tr>
<tr>
<td width="4"> </td>
<td class="texto11pxBlack" colspan="4" width="478" valign="Top">Aquí muestro el pedazo o los pedazos de código para lograr esto, imagen 1.</p>
<p>Como se puede apreciar en la imagen, hay dos eventos (<strong>Load</strong>, <strong>KeyPress</strong>) los dos para el Formulario, el <strong>Load</strong> lo hago para que cuando inicie la aplicación, el formulario adquiera la forma siguiente forma, imagen 2.</p>
<p>Y el evento <strong>KeyPress</strong> para que cuando al presionar cualquier tecla se salga de la aplicación.</p>
<p>Bueno esa es una de las tantas formas que le podemos dar a un formulario, el truco esta en el tamaño que le asignemos a nuestra elipse. </p>
<p>Espero que haya sido de su agrado y le invito a seguir desarrollando en esta poderosa herramienta</td>
<td class="texto11pxBlack" width="163" align="center" valign="top"> <a href="imagen('258_0','499')"><img src="http://www.netveloper.com/multimedia/articulos/258/p_1.gif" border="0" alt="" /></a><br />
Imagen 1</p>
<p><a href="imagen('258_0','500')"><img src="http://www.netveloper.com/multimedia/articulos/258/p_2.gif" border="0" alt="" /></a><br />
Imagen 2</td>
<td width="4"> </td>
</tr>
<tr>
<td width="4"> </td>
<td colspan="4" width="478"> </td>
<td width="4"> </td>
</tr>
<tr>
<td colspan="7" height="6"> </td>
</tr>
</tbody>
</table>
<p>Fuente: <a href="http://www.netveloper.com/contenido2.aspx?IDC=258_0">http://www.netveloper.com/contenido2.aspx?IDC=258_0</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.finderit.com/net/2009/03/22/formulario-con-forma-form-form-en-vbnet/feed/</wfw:commentRss>
		</item>
		<item>
		<title>TDD Paso a Paso utilizando VSTS</title>
		<link>http://blog.finderit.com/net/2009/03/22/tdd-paso-a-paso-utilizando-vsts-2/</link>
		<comments>http://blog.finderit.com/net/2009/03/22/tdd-paso-a-paso-utilizando-vsts-2/#comments</comments>
		<pubDate>Sun, 22 Mar 2009 19:04:28 +0000</pubDate>
		<dc:creator>gabi</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.finderit.com/net/?p=101</guid>
		<description><![CDATA[Introducción
Desde hace un tiempo eXtreme Programming ha comenzado a cambiar los hábitos clásicos de los equipos de desarrollo. Uno de los pilares de esta metodología se centra sobre el aumento de la productividad de los equipos de desarrollo. Este aumento se puede lograr (en gran parte) si los equipos trabajan utilizando una nueva técnica de [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Introducción</strong><br />
Desde hace un tiempo eXtreme Programming ha comenzado a cambiar los hábitos clásicos de los equipos de desarrollo. Uno de los pilares de esta metodología se centra sobre el aumento de la productividad de los equipos de desarrollo. Este aumento se puede lograr (en gran parte) si los equipos trabajan utilizando una nueva técnica de trabajo denominada Test Development Driven (TDD). </p>
<p>Hace unos meses, configurar un entorno TDD, era una tarea complicada; pero desde la llegada de <strong>Visual Studio 2005 y Team Foundation Server (TFS)</strong>, esta tarea se simplifica muchísimo. </p>
<p>Luego de estar probando durante mucho tiempos las versiones Beta de estos productos, finalmente pude participar en un proyecto donde aplicásemos una metodología ágil, integrados con TFS. </p>
<p>El objetivo de este artículo es demostrar paso a paso como se puede utilizar Visual Studio Team System, en un proceso de desarrollo ágil, que contemple la creación de un componente, sus pruebas y los sucesivos pasos de integración hasta el proceso de <strong>Continuous Integration</strong>.</p>
<p><strong>Creación de un componente de ejemplo</strong></p>
<p>Lo primero que haremos es crear un nuevo proyecto Visual Basic Net (imagen 1), para esto abrimos Visual Studio y seleccionamos las siguientes opciones:</p>
<p>1.	Menú <strong>File -&gt; New -&gt; Project</strong><br />
2.	Seleccionamos Visual Basic, y dentro la opción Windows; el tipo de proyecto será<strong>Class Library</strong><br />
3.	Definimos el nombre del proyecto; a modo de ejemplo lo hemos llamado<strong>TDDEjemplo</strong></p>
<p>Dentro de nuestro proyecto renombramos la clase con el nombre “<strong>Labs</strong>” y agregamos el siguiente código de ejemplo:</p>
<p><span class="codigo"><br />
Public Class Labs</p>
<p> &#8221; <br />
 &#8221; Obtiene un mensaje de informacion<br />
 &#8221; <br />
 &#8221; Obtiene un mensaje de informacion<br />
 Public Function ObtenerInformacion() As String<br />
  Return &#8220;Hola Mundo&#8221;<br />
 End Function</p>
<p> &#8221; <br />
 &#8221; Retorna el nombre completo a partir de un Nombre y un Apellido<br />
 &#8221; <br />
 &#8221; </span>Nombre<br />
 &#8221; Apellido<br />
 &#8221; Retorna el nombre completo a partir de un Nombre y un Apellido<br />
 Public Function CrearNombreCompleto(ByVal Nombre As String, ByVal Apellido As String) As String<br />
  Return Nombre &amp; &#8220;, &#8221; &amp; Apellido<br />
 End Function</p>
<p>End Class</p>
<p>Hemos agregado 2 funciones <strong>ObtenerInformacion</strong> y <strong>CrearNombreCompleto</strong>, que utilizaremos para integrar nuestro proyecto de pruebas en un proceso TDD.</p>
<p><strong>Creación de un proyecto de pruebas unitarias</strong></p>
<p>El siguiente paso es crear un proyecto que nos permita probar la funcionalidad del proyecto <strong>TDDEjemplo</strong>. Para eso crearemos una serie de pruebas unitarias (Unit Tests), que servirán como base para evaluar el funcionamiento correcto de las funciones que creamos en el paso anterior. Para esto posicionamos el cursor en la línea de definición de una de las funciones y desplegamos el menú contextual, y seleccionamos la opción <strong>Create Unit Tests</strong></p>
<p><em><strong>Nota</strong>: otra de las opciones que poseemos es la opción <strong>Rename</strong>, esta opción nos permite renombrar el nombre de la función y reemplazar este nombre en todos los lugares donde se utilice la función. Esta acción es un caso de <strong>Refactoring.</strong></em></p>
<p>El siguiente formulario nos permite seleccionar las funciones sobre las cuales queremos crear los Tests unitarios. En este caso seleccionamos ambas funciones</p>
<p><img src="http://www.netveloper.com/multimedia/articulos/307/6.gif" alt="" /><br />
Selección de funciones para las pruebas unitarias</p>
<p>Las funciones con los Tests unitarios se crearan en un nuevo proyecto, en la opción para definir el nombre ingresamos <strong>TDDEjemploTest</strong><br />
. <br />
Esta opción nos agrega un nuevo proyecto a la solución y le agrega como referencia el proyecto TDDEjemplo, además agrega dentro de la solución una serie de nuevos elementos.</p>
<p><img src="http://www.netveloper.com/multimedia/articulos/307/3.gif" alt="" /><br />
Solución con el nuevo proyecto de pruebas</p>
<p>En el nuevo proyecto de pruebas, se ha creado una clase <strong>LabsTest.vb</strong> que posee las siguientes pruebas unitarias;</p>
<p><strong>Clase Labs.vb</strong>&amp;nbps;&amp;nbps;&amp;nbps;<strong>Clase LabsTests.vb</strong><br />
ObtenerInformacion&amp;nbps;&amp;nbps;&amp;nbps;&amp;nbps;&amp;nbps;ObtenerInformacionTest<br />
CrearNombreCompleto&amp;nbps;&amp;nbps;&amp;nbps;&amp;nbps;&amp;nbps;CrearNombreCompletoTest</p>
<p>Las nuevas funciones utilizan la librería<strong>Microsoft.VisualStudio.QualityTools.UnitTestFramework</strong>, que ha sido incluida dentro de la suite de Visual Studio 2005, para la ejecución de pruebas unitarias. El asistente crea las nuevas funciones implementando una llamada a la función que se quiere probar y generando el código necesario para el mismo. </p>
<p>Por ejemplo la función <strong>CrearNombreCompletoTest</strong>; incluye la definición de las variables <strong>Nombre</strong> y <strong>Apellido</strong>, adicionalmente se agrega como tarea inicializar los valores de estas variables. </p>
<p><span class="codigo"><br />
 &#8221;<br />
 &#8221;A test for CrearNombreCompleto(ByVal String, ByVal String)<br />
 &#8221;<br />
  _<br />
 Public Sub CrearNombreCompletoTest()<br />
  Dim target As Labs = New Labs<br />
  Dim Nombre As String = Nothing &#8216;TODO: Initialize to an appropriate value<br />
  Dim Apellido As String = Nothing &#8216;TODO: Initialize to an appropriate value<br />
  Dim expected As String = Nothing<br />
  Dim actual As String<br />
  actual = target.CrearNombreCompleto(Nombre, Apellido)<br />
  Assert.AreEqual(expected, actual, &#8220;TDDEjemplo.Labs.CrearNombreCompleto did not return the expected value.&#8221;)<br />
  Assert.Inconclusive(&#8221;Verify the correctness of this test method.&#8221;)<br />
 End Sub</p>
<p></span></p>
<p>Para poder probar esta función completaremos los valores de estas variables y también la variable <strong>expected</strong>, que es la que almacena el valor esperado para luego comparar con el resultado de la ejecución de la prueba. </p>
<p>El código final quedaría como en el siguiente ejemplo:</p>
<p><span class="codigo"><br />
 &#8221;<br />
 &#8221;A test for CrearNombreCompleto(ByVal String, ByVal String)<br />
 &#8221;<br />
  _<br />
 Public Sub CrearNombreCompletoTest()<br />
  Dim target As Labs = New Labs</p>
<p>  Dim Nombre As String = &#8220;Bruno&#8221;<br />
  Dim Apellido As String = &#8220;Capuano&#8221;<br />
  Dim expected As String = &#8220;Bruno, Capuano&#8221;<br />
  Dim actual As String</p>
<p>  actual = target.CrearNombreCompleto(Nombre, Apellido)</p>
<p>  Assert.AreEqual(expected, actual, &#8220;TDDEjemplo.Labs.CrearNombreCompleto did not return the expected value.&#8221;)</p>
<p> End Sub</p>
<p> &#8221;<br />
 &#8221;A test for ObtenerInformacion()<br />
 &#8221;<br />
  _<br />
 Public Sub ObtenerInformacionTest()<br />
  Dim target As Labs = New Labs</p>
<p>  Dim expected As String = &#8220;Hola Mundo&#8221;<br />
  Dim actual As String</p>
<p>  actual = target.ObtenerInformacion</p>
<p>  Assert.AreEqual(expected, actual, &#8220;TDDEjemplo.Labs.ObtenerInformacion did not return the expected value.&#8221;)</p>
<p> End Sub<br />
</span></p>
<p><em><strong>Nota</strong>: el generador de pruebas unitarias agrega además de la prueba de la función la siguiente sentencia <strong>Assert.Inconclusive(…)</strong>, para verificar que se complete el código de la prueba unitaria; esta línea debe ser eliminada luego de implementada la prueba unitaria ya que la misma no retornará un resultado exitoso si se deja esta llamada.</em></p>
<p>Una vez que hemos completado la definición de las prueba unitarias podemos ejecutar las mismas para evaluar si nuestro componente <strong>TDDEjemplo.Labs</strong>funciona correctamente. Para lanzar el proceso de ejecución de pruebas unitarias debemos seleccionar:</p>
<p>Menú <strong>Test -&gt; Start Selected Test Project with Debugger</strong></p>
<p>Si no hemos cometido ningún error y las pruebas validan esta definición, el resultado debe ser exitoso y lo podremos visualizar en la ventana de <strong>Test Results</strong>;</p>
<p><img src="http://www.netveloper.com/multimedia/articulos/307/4.gif" alt="" /><br />
Ejecución exitosa de las pruebas unitarias.</p>
<p>Si en cambio hemos tenido algún error o hemos dejado la llamada<strong>Assert.Inconclusive(…)</strong>, podremos ver alguno de los siguientes resultados:</p>
<p>                    <img src="http://www.netveloper.com/multimedia/articulos/307/p_5.gif" border="0" alt="" />                                            Fuente: <a href="http://www.netveloper.com/contenido2.aspx?IDC=307_0">http://www.netveloper.com/contenido2.aspx?IDC=307_0</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.finderit.com/net/2009/03/22/tdd-paso-a-paso-utilizando-vsts-2/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Tratamiento de Errores haciendo uso de excepciones en Visual Basic .NET (Valido para las versiones 2003 y 2005 de VS.NET)</title>
		<link>http://blog.finderit.com/net/2009/03/22/tratamiento-de-errores-haciendo-uso-de-excepciones-en-visual-basic-net-valido-para-las-versiones-2003-y-2005-de-vsnet/</link>
		<comments>http://blog.finderit.com/net/2009/03/22/tratamiento-de-errores-haciendo-uso-de-excepciones-en-visual-basic-net-valido-para-las-versiones-2003-y-2005-de-vsnet/#comments</comments>
		<pubDate>Sun, 22 Mar 2009 19:02:52 +0000</pubDate>
		<dc:creator>gabi</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.finderit.com/net/?p=100</guid>
		<description><![CDATA[


 
En este articulo mostrare como evitar y manejar errores desde VB.NET utilizando los Bloques Try,Catch, Finally y la condicionante If..Then..Else. Anteriormente cuando desarrollábamos una aplicación en VB6 tratábamos los errores o mejor dicho evitábamos un desborde de nuestra aplicación utilizando “On Error Resume Next” y esto nos ayudaba a que no se desbordara la aplicación.
 


 


 
 
 


 
Eso [...]]]></description>
			<content:encoded><![CDATA[<table id="Contenido_plantilla_1_1_table5" border="0" cellspacing="0" cellpadding="0" width="649">
<tbody>
<tr>
<td width="4"> </td>
<td class="txt11px_GreenBold" colspan="5" width="641">En este articulo mostrare como evitar y manejar errores desde VB.NET utilizando los Bloques Try,Catch, Finally y la condicionante If..Then..Else. Anteriormente cuando desarrollábamos una aplicación en VB6 tratábamos los errores o mejor dicho evitábamos un desborde de nuestra aplicación utilizando “On Error Resume Next” y esto nos ayudaba a que no se desbordara la aplicación.</td>
<td width="4"> </td>
</tr>
<tr>
<td colspan="7" height="6"> </td>
</tr>
<tr>
<td width="4"> </td>
<td colspan="4" width="478"> </td>
<td width="4"> </td>
</tr>
<tr>
<td width="4"> </td>
<td class="texto11pxBlack" colspan="4" width="478" valign="Top">Eso lo hacíamos más o menos así. (Ejemplo en VB6)<br />
<span class="codigo"><br />
Private Sub cmdOk_Click( ) </p>
<p> On Error Resume Next<br />
 If TextBox1.Text = 2 Then<br />
  cmd.Write(TextBox1.Text)<br />
 End If</p>
<p>End Sub <br />
</span></p>
<p>Ciertamente aquí nos tiene que dar un error seguro, ya que “<strong>cmd.Write</strong>” no es parte de la sintaxis de <strong>VB6</strong>, en caso de que no hubiésemos tenido “<strong>On Error Resume Next</strong>” pues la aplicación sufriría un desbordamiento.</p>
<p>Aunque en <strong>.NET</strong> todavía podemos usar esta forma, lo que se nos aconseja es que utilicemos “<strong>Try Catch</strong>”. Vamos a ver un ejemplo de una <strong>ConsoleApplication</strong>.</p>
<p><span class="codigo"><br />
Sub Main()</p>
<p>Dim i As Integer<br />
Dim j As Integer</p>
<p>Try<br />
 &#8217;Dentro de este bloque ponemos el codigo que <br />
 &#8217;necesitamos evaluar<br />
 i = 10<br />
 j = 0<br />
 Dim res As Integer<br />
 res = i / j<br />
 System.Console.WriteLine(&#8221;El Resultado es:&#8221; &amp; res)<br />
Catch ex As Exception<br />
 &#8217;Aqui nos indicara el origen del error<br />
 System.Console.WriteLine(ex.Message)<br />
Finally<br />
 System.Console.ReadLine()<br />
End Try</p>
<p>End Sub<br />
</span></p>
<p>Como podemos ver en el codigo (el cual esta comentado), se generara un error ya que estamos intentando dividir una cantidad por cero (0) y esto matematicamente es imposible. Luego el Bloque “Catch” entra en funcion con el mensaje de excepcion y nos presenta el suguiente mensaje en pantalla, imagen 1.</p>
<p>En caso de que sacaramos el codigo del “<strong>Try Catch</strong>” pasaria lo siguiente, imagen 2.</p>
<p>Nos aparece este mensaje de error el cual no nos dejara compilar nuestra aplicación.</p>
<p>Pero esto es con valores los cuales podemos controlar facilmente porque lo ponemos nosotros mismos, pero que pasaria con una cantidad que introduzca el usuario del sistema, para ver este caso crearemos una WindowsApplication.</p>
<p>El Formulario se vera asi.</p>
<p><img src="http://www.netveloper.com/multimedia/articulos/304/3.gif" alt="" /></p>
<p>El mensaje de error como el del resultado de la operación (division) seran presentandos en un MessageBox.</p>
<p>Este seria el codigo de la aplicación.<br />
<span class="codigo"><br />
Private Sub btnDividir_Click(ByVal sender As System.Object, _<br />
ByVal e As System.EventArgs) Handles btnDividir.Click</p>
<p>&#8216;Declaramos y asignamos los valores de entrada<br />
&#8216;los cuales los definira el usuario<br />
Dim i As Integer = Val(Me.txtPR.Text)<br />
Dim j As Integer = Val(Me.txtSR.Text)</p>
<p>Try<br />
 &#8217;Declaramos la variable del resultado<br />
 Dim res As Integer<br />
 &#8217;Realizamos la operacion<br />
 res = i / j<br />
 &#8217;Mostramos el resultado de la operacion en pantalla<br />
 MessageBox.Show(&#8221;El Resultado es:&#8221; &amp; res)<br />
Catch ex As Exception<br />
 MessageBox.Show(ex.Message)<br />
End Try</p>
<p>End Sub<br />
</span><br />
La diferencia a simple vista no es mucha pero si nos fijamos esta vez el usuario definira la cantidad, pero con esto no es que todo esta hecho hay otras cosas que tenemos que tomar en cuenta, por ejemplo, si el usuario en vez de numeros introduce letras, la operación no se daria, esto lo podemos hacer utilizano “<strong>Not IsNumeric(objeto)</strong>” dentro de una condicion “<strong>If…Then…Else</strong>” la cual puede ir dentro del Bloque “<strong>Try Catch</strong>”</p>
<p>Veamos el Codigo.<br />
<span class="codigo"><br />
Private Sub btnDividir_Click(ByVal sender As System.Object, _<br />
ByVal e As System.EventArgs) Handles btnDividir.Click</p>
<p>&#8216;Declaramos y asignamos los valores de entrada<br />
&#8216;los cuales los definira el usuario<br />
Dim i As Integer = Val(Me.txtPR.Text)<br />
Dim j As Integer = Val(Me.txtSR.Text)</p>
<p>Try</p>
<p> &#8217;En caso de no sea numerico el dato introducido<br />
 If Not IsNumeric(Me.txtPR.Text) Then<br />
  MessageBox.Show(&#8221;El Primer Rango debe ser numerico&#8221;, &#8220;Dato numerico&#8221;)<br />
  &#8217;Limpia la entrada<br />
  Me.txtPR.Clear()<br />
  &#8217;Enfoca para una nueva entrada<br />
  Me.txtPR.Focus()<br />
  &#8217;Con esto los que hago es dividir la ejecucion de cada subrutina<br />
  &#8217;para evitar una sobrecarga en la condicion<br />
  Exit Sub<br />
 ElseIf Not IsNumeric(Me.txtSR.Text) Then<br />
  MessageBox.Show(&#8221;El Segundo Rango debe ser numerico&#8221;, &#8220;Datos numerico&#8221;)<br />
  Me.txtSR.Clear()<br />
  Me.txtSR.Focus()<br />
  Exit Sub<br />
 Else<br />
  &#8217;Declaramos la variable del resultado<br />
  Dim res As Integer<br />
  &#8217;Realizamos la operacion<br />
  res = i / j<br />
  &#8217;Mostramos el resultado de la operacion en pantalla<br />
  MessageBox.Show(&#8221;El Resultado es:&#8221; &amp; res)<br />
 End If</p>
<p>Catch ex As Exception<br />
 MessageBox.Show(ex.Message)<br />
End Try<br />
End Sub<br />
</span></p>
<p>La aplicación en caso de que utilizemos letras en lugar de numeros para realizar la operación matematica nos mostrara el siguiente error.</p>
<p><img src="http://www.netveloper.com/multimedia/articulos/304/4.gif" alt="" /></p>
<p>En caso de que el usuario haya introducido bien los datos, mostrara el resultado de la siguiente manera.</p>
<p><img src="http://www.netveloper.com/multimedia/articulos/304/5.gif" alt="" /></p>
<p>En conclusion, la diferencia que podemos constatar al realizar una WindowsApplication como una ConsoleApplication es que.</p>
<p><strong>La ConsoleApplication:</strong> en esta el error es provocado por nosotros mismos y asi es demasiado facil predecir el error y evitarlo, aun sin tener que utilizar excepciones.</p>
<p><strong>La WindowsApplication:</strong> aquí es diferente ya que los datos son introducidos por el usuario y de no utilizar las excepciones el programa nos daria un error de desbordamiento “muy feo” sacando al usuario del mismo. </p>
<p>Pues bien, esto es solo una parte de lo que es el tratamiento de errores en <strong>.NET</strong>, espero que este articulo les haya sido de utilidad, que esa es la intencion</td>
<td class="texto11pxBlack" width="163" align="center" valign="top"> <a href="imagen('304_0','588')"><img src="http://www.netveloper.com/multimedia/articulos/304/p_1.gif" border="0" alt="" /></a><br />
Imagen 1</p>
<p><a href="imagen('304_0','589')"><img src="http://www.netveloper.com/multimedia/articulos/304/p_2.gif" border="0" alt="" /></a><br />
Imagen 2</td>
<td width="4"> </td>
</tr>
<tr>
<td width="4"> </td>
<td colspan="4" width="478"> </td>
<td width="4"> </td>
</tr>
<tr>
<td colspan="7" height="6"> </td>
</tr>
</tbody>
</table>
<p> Fuente: <a href="http://www.netveloper.com/contenido2.aspx?IDC=304_0">http://www.netveloper.com/contenido2.aspx?IDC=304_0</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.finderit.com/net/2009/03/22/tratamiento-de-errores-haciendo-uso-de-excepciones-en-visual-basic-net-valido-para-las-versiones-2003-y-2005-de-vsnet/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Saber que versión del .NET Framework estamos utilizando</title>
		<link>http://blog.finderit.com/net/2009/03/22/saber-que-version-del-net-framework-estamos-utilizando/</link>
		<comments>http://blog.finderit.com/net/2009/03/22/saber-que-version-del-net-framework-estamos-utilizando/#comments</comments>
		<pubDate>Sun, 22 Mar 2009 19:01:29 +0000</pubDate>
		<dc:creator>gabi</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.finderit.com/net/?p=99</guid>
		<description><![CDATA[


En primer lugar saludos a toda la comunidad de desarrolladores de .NET y los que no son de .NET también, en este artículo (el cual es muy sencillo) pretendo mostrar un uso muy importante que nos brinda la clase Environment, esta nos permite revisar que versión del framework tenemos instalado en nuestro equipo.
 


 


 
 
 


 
En caso que [...]]]></description>
			<content:encoded><![CDATA[<table id="Contenido_plantilla_1_1_table5" border="0" cellspacing="0" cellpadding="0" width="649">
<tbody>
<tr>
<td class="txt11px_GreenBold" colspan="5" width="641">En primer lugar saludos a toda la comunidad de desarrolladores de .NET y los que no son de .NET también, en este artículo (el cual es muy sencillo) pretendo mostrar un uso muy importante que nos brinda la clase Environment, esta nos permite revisar que versión del framework tenemos instalado en nuestro equipo.</td>
<td width="4"> </td>
</tr>
<tr>
<td colspan="7" height="6"> </td>
</tr>
<tr>
<td width="4"> </td>
<td colspan="4" width="478"> </td>
<td width="4"> </td>
</tr>
<tr>
<td width="4"> </td>
<td class="texto11pxBlack" colspan="4" width="478" valign="Top"><strong>En caso que sea desde una WindowsApplication</strong></p>
<p>Sin mas preámbulos nos dirigimos a lo que nos interesa el código, este lo podemos hacer desde un <strong>Button</strong>.</p>
<p>Código en <strong>VB.NET</strong><br />
<span class="codigo"><br />
Private Sub btnVer_Click(ByVal sender As System.Object, _<br />
 ByVal e As System.EventArgs) Handles btnVer.Click</p>
<p> &#8217;Mostramos la informacion en un MessageBox<br />
 MessageBox.Show(&#8221;La Versión del Framework:&#8221; &amp; &#8221; &#8221; &amp; Environment.Version.ToString, &#8220;Saber Versión del Framework&#8221;)</p>
<p>End Sub<br />
</span><br />
La informacion en pantalla se mostrara de la siguiente manera</p>
<p><img src="http://www.netveloper.com/multimedia/articulos/301/1.gif" alt="" /></p>
<p><strong>En caso de que la quieras mostrar en una ConsoleApplication</strong></p>
<p>El Codigo es el siguiente<br />
<span class="codigo"><br />
Sub Main()<br />
 &#8217;Accedemos mediante el Metodo &#8220;WriteLine&#8221;<br />
 System.Console.WriteLine(&#8221;La Versión del Framework es:&#8221; &amp; &#8221; &#8221; &amp; Environment.Version.ToString())<br />
 &#8217;Usamo el Metodo &#8220;ReadLine&#8221; para leer la cadena que envia &#8220;WriteLine&#8221;<br />
 System.Console.ReadLine()<br />
End Sub<br />
</span><br />
La Aplicacion corriendo se veria asi.</p>
<p><img src="http://www.netveloper.com/multimedia/articulos/301/2.gif" alt="" width="500" /></p>
<p><strong>El porque de esto</strong>: Con la salida de VS.NET la programacion Windows dio un giro de 360 grados en cuanto a Performance, Codigo manejado, Diseño y Estructura y algo muy importante <strong>Distribucion</strong>, asi es, a la hora de distribuir nuestro ejecutable debemos verificar que este corra bajo el mismo Framework en el que fue trabajado, ademas esto lo podemos agregar como una caracteristica utilitaria a las aplicación<strong>Cliente/Servidor</strong> que realicemos.</td>
<td class="texto11pxBlack" width="163" align="center" valign="top"> </td>
<td width="4"> </td>
</tr>
<tr>
<td width="4"> </td>
<td colspan="4" width="478"> </td>
</tr>
</tbody>
</table>
<p>Fuente: <a href="http://www.netveloper.com/contenido2.aspx?IDC=301_0">http://www.netveloper.com/contenido2.aspx?IDC=301_0</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.finderit.com/net/2009/03/22/saber-que-version-del-net-framework-estamos-utilizando/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Herencia en VB.NET (Aplicada al diseño de Form)</title>
		<link>http://blog.finderit.com/net/2009/03/22/herencia-en-vbnet-aplicada-al-diseno-de-form/</link>
		<comments>http://blog.finderit.com/net/2009/03/22/herencia-en-vbnet-aplicada-al-diseno-de-form/#comments</comments>
		<pubDate>Sun, 22 Mar 2009 18:59:49 +0000</pubDate>
		<dc:creator>gabi</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.finderit.com/net/?p=98</guid>
		<description><![CDATA[


 
No se trata de dinero ni nada por el estilo, es que en la programación orientada a objetos (POO) existe algo que los lenguajes utilizan llamado &#8220;Herencia&#8221; que al igual como nosotros heredamos características de nuestros padres, en este caso en VB.NET se hereda la misma forma en el diseño de los Formularios. Esto de [...]]]></description>
			<content:encoded><![CDATA[<table id="Contenido_plantilla_1_1_table5" border="0" cellspacing="0" cellpadding="0" width="649">
<tbody>
<tr>
<td width="4"> </td>
<td class="txt11px_GreenBold" colspan="5" width="641">No se trata de dinero ni nada por el estilo, es que en la programación orientada a objetos (POO) existe algo que los lenguajes utilizan llamado &#8220;Herencia&#8221; que al igual como nosotros heredamos características de nuestros padres, en este caso en VB.NET se hereda la misma forma en el diseño de los Formularios. Esto de la herencia no es nuevo ya lenguajes como JAVA lo vienen implementando desde sus comienzos.</td>
<td width="4"> </td>
</tr>
<tr>
<td colspan="7" height="6"> </td>
</tr>
<tr>
<td width="4"> </td>
<td colspan="4" width="478"> </td>
<td width="4"> </td>
</tr>
<tr>
<td width="4"> </td>
<td class="texto11pxBlack" colspan="4" width="478" valign="Top">Pero si es nuevo (y de paquete) para los lenguajes de Microsoft y en este caso los lenguajes de .NET (VB,C#,C++), excluyo al JSharp(J#), porque es un derivado de JAVA y este ya lo usa desde sus comienzos. Este tema puede tornarse muy complicado según vamos avanzando en el, pero, esta vez no nos complicaremos la vida y veremos la herencia de diseños de Forms.</p>
<p>Lo primero que debemos hacer es abrir nuestro <strong>Visual Studio .NET 2003</strong>, luego, elegimos el lenguaje que vayamos a usar (en este caso será Visual Basic (VB)), elegimos <strong>WindowsApplication (o Windows Forms)</strong>.</p>
<p>Una vez ya hayamos hecho esto, procedemos a darle una forma como esta al Formulario Padre que es del cual vamos a heredar la forma. Tendrá un aspecto como este:</p>
<p><img src="http://www.netveloper.com/multimedia/articulos/302/1.gif" alt="" /></p>
<p>Luego de que terminemos de darle ese aspecto (ese fue el que yo le di, si quieres puedes darle el que se te antoje). Procedemos a agregar otro WindowsForm y luego que ya lo tengamos agregado a nuestro Proyecto o Solución identificamos una parte de código que se llama <strong>Inherits</strong> System.Windows.Forms.Form, este es el que trae por defecto solo le cambiamos lo que sigue después de <strong>Inherits</strong> por el nombre del Formulario que queramos heredar, en este caso será el Form1.vb, seria de esta manera: <strong>Inherits</strong> Form1</p>
<p>Luego compilamos en modo <strong>Debug</strong> que es un modo de prueba revisamos el<strong>Form2</strong> y tendra el mismo aspecto que el <strong>Form1</strong> veamos la siguiente imagen.</p>
<p><img src="http://www.netveloper.com/multimedia/articulos/302/2.gif" alt="" /></p>
<p>Luego que hayamos terminado esto, si nos fijamos el <strong>Formulario Hijo</strong> hereda la misma forma que el <strong>Formulario Padre</strong> pero hay que tener en cuenta varias cosas.</p>
<p><strong>1. No se hereda código de ningún objeto</strong></p>
<p><strong>2. Al realizar el &#8220;Inherits&#8221;</strong> el Formulario que hereda tendrá todos los elementos bloqueados, para solucionar esto nos dirigimos al <strong>Formulario Padre (Form1)</strong> y en este los objetos tienen una propiedad que se llama Modifiers que trae por defecto <strong>Friend </strong>le decimos que es igual a <strong>Protected</strong> y listo (esto es a cada uno de los objetos que queramos heredar), luego compilamos nuevamente en modo<strong>Debug</strong> , revisamos y ya estos estarán disponibles para poder editarlos y usarlos</p>
<p><strong>NOTA: no puedes cambiarle el nombre ya que el interpretador de código del Framework se guía por ahí, para poder hacer la identificación del objeto en herencia y el correcto funcionamiento de este.</strong></td>
<td class="texto11pxBlack" width="163" align="center" valign="top"> </td>
<td width="4"> </td>
</tr>
<tr>
<td width="4"> </td>
<td colspan="4" width="478"> </td>
<td width="4"> </td>
</tr>
<tr>
<td colspan="7" height="6"> </td>
</tr>
</tbody>
</table>
<p>Fuente: <a href="http://www.netveloper.com/contenido2.aspx?IDC=302_0">http://www.netveloper.com/contenido2.aspx?IDC=302_0</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.finderit.com/net/2009/03/22/herencia-en-vbnet-aplicada-al-diseno-de-form/feed/</wfw:commentRss>
		</item>
		<item>
		<title>TDD Paso a Paso utilizando VSTS</title>
		<link>http://blog.finderit.com/net/2009/03/22/tdd-paso-a-paso-utilizando-vsts/</link>
		<comments>http://blog.finderit.com/net/2009/03/22/tdd-paso-a-paso-utilizando-vsts/#comments</comments>
		<pubDate>Sun, 22 Mar 2009 18:57:21 +0000</pubDate>
		<dc:creator>gabi</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.finderit.com/net/?p=97</guid>
		<description><![CDATA[Introducción
Desde hace un tiempo eXtreme Programming ha comenzado a cambiar los hábitos clásicos de los equipos de desarrollo. Uno de los pilares de esta metodología se centra sobre el aumento de la productividad de los equipos de desarrollo. Este aumento se puede lograr (en gran parte) si los equipos trabajan utilizando una nueva técnica de [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Introducción</strong><br />
Desde hace un tiempo eXtreme Programming ha comenzado a cambiar los hábitos clásicos de los equipos de desarrollo. Uno de los pilares de esta metodología se centra sobre el aumento de la productividad de los equipos de desarrollo. Este aumento se puede lograr (en gran parte) si los equipos trabajan utilizando una nueva técnica de trabajo denominada Test Development Driven (TDD). </p>
<p>Hace unos meses, configurar un entorno TDD, era una tarea complicada; pero desde la llegada de <strong>Visual Studio 2005 y Team Foundation Server (TFS)</strong>, esta tarea se simplifica muchísimo. </p>
<p>Luego de estar probando durante mucho tiempos las versiones Beta de estos productos, finalmente pude participar en un proyecto donde aplicásemos una metodología ágil, integrados con TFS. </p>
<p>El objetivo de este artículo es demostrar paso a paso como se puede utilizar Visual Studio Team System, en un proceso de desarrollo ágil, que contemple la creación de un componente, sus pruebas y los sucesivos pasos de integración hasta el proceso de <strong>Continuous Integration</strong>.</p>
<p><strong>Creación de un componente de ejemplo</strong></p>
<p>Lo primero que haremos es crear un nuevo proyecto Visual Basic Net (imagen 1), para esto abrimos Visual Studio y seleccionamos las siguientes opciones:</p>
<p>1.	Menú <strong>File -&gt; New -&gt; Project</strong><br />
2.	Seleccionamos Visual Basic, y dentro la opción Windows; el tipo de proyecto será<strong>Class Library</strong><br />
3.	Definimos el nombre del proyecto; a modo de ejemplo lo hemos llamado<strong>TDDEjemplo</strong></p>
<p>Dentro de nuestro proyecto renombramos la clase con el nombre “<strong>Labs</strong>” y agregamos el siguiente código de ejemplo:</p>
<p><span class="codigo"><br />
Public Class Labs</p>
<p> &#8221; <br />
 &#8221; Obtiene un mensaje de informacion<br />
 &#8221; <br />
 &#8221; Obtiene un mensaje de informacion<br />
 Public Function ObtenerInformacion() As String<br />
  Return &#8220;Hola Mundo&#8221;<br />
 End Function</p>
<p> &#8221; <br />
 &#8221; Retorna el nombre completo a partir de un Nombre y un Apellido<br />
 &#8221; <br />
 &#8221; </span>Nombre<br />
 &#8221; Apellido<br />
 &#8221; Retorna el nombre completo a partir de un Nombre y un Apellido<br />
 Public Function CrearNombreCompleto(ByVal Nombre As String, ByVal Apellido As String) As String<br />
  Return Nombre &amp; &#8220;, &#8221; &amp; Apellido<br />
 End Function</p>
<p>End Class</p>
<p>Hemos agregado 2 funciones <strong>ObtenerInformacion</strong> y <strong>CrearNombreCompleto</strong>, que utilizaremos para integrar nuestro proyecto de pruebas en un proceso TDD.</p>
<p><strong>Creación de un proyecto de pruebas unitarias</strong></p>
<p>El siguiente paso es crear un proyecto que nos permita probar la funcionalidad del proyecto <strong>TDDEjemplo</strong>. Para eso crearemos una serie de pruebas unitarias (Unit Tests), que servirán como base para evaluar el funcionamiento correcto de las funciones que creamos en el paso anterior. Para esto posicionamos el cursor en la línea de definición de una de las funciones y desplegamos el menú contextual, y seleccionamos la opción <strong>Create Unit Tests</strong></p>
<p><em><strong>Nota</strong>: otra de las opciones que poseemos es la opción <strong>Rename</strong>, esta opción nos permite renombrar el nombre de la función y reemplazar este nombre en todos los lugares donde se utilice la función. Esta acción es un caso de <strong>Refactoring.</strong></em></p>
<p>El siguiente formulario nos permite seleccionar las funciones sobre las cuales queremos crear los Tests unitarios. En este caso seleccionamos ambas funciones</p>
<p><img src="http://www.netveloper.com/multimedia/articulos/307/6.gif" alt="" /><br />
Selección de funciones para las pruebas unitarias</p>
<p>Las funciones con los Tests unitarios se crearan en un nuevo proyecto, en la opción para definir el nombre ingresamos <strong>TDDEjemploTest</strong><br />
. <br />
Esta opción nos agrega un nuevo proyecto a la solución y le agrega como referencia el proyecto TDDEjemplo, además agrega dentro de la solución una serie de nuevos elementos.</p>
<p><img src="http://www.netveloper.com/multimedia/articulos/307/3.gif" alt="" /><br />
Solución con el nuevo proyecto de pruebas</p>
<p>En el nuevo proyecto de pruebas, se ha creado una clase <strong>LabsTest.vb</strong> que posee las siguientes pruebas unitarias;</p>
<p><strong>Clase Labs.vb</strong>&amp;nbps;&amp;nbps;&amp;nbps;<strong>Clase LabsTests.vb</strong><br />
ObtenerInformacion&amp;nbps;&amp;nbps;&amp;nbps;&amp;nbps;&amp;nbps;ObtenerInformacionTest<br />
CrearNombreCompleto&amp;nbps;&amp;nbps;&amp;nbps;&amp;nbps;&amp;nbps;CrearNombreCompletoTest</p>
<p>Las nuevas funciones utilizan la librería<strong>Microsoft.VisualStudio.QualityTools.UnitTestFramework</strong>, que ha sido incluida dentro de la suite de Visual Studio 2005, para la ejecución de pruebas unitarias. El asistente crea las nuevas funciones implementando una llamada a la función que se quiere probar y generando el código necesario para el mismo. </p>
<p>Por ejemplo la función <strong>CrearNombreCompletoTest</strong>; incluye la definición de las variables <strong>Nombre</strong> y <strong>Apellido</strong>, adicionalmente se agrega como tarea inicializar los valores de estas variables. </p>
<p><span class="codigo"><br />
 &#8221;<br />
 &#8221;A test for CrearNombreCompleto(ByVal String, ByVal String)<br />
 &#8221;<br />
  _<br />
 Public Sub CrearNombreCompletoTest()<br />
  Dim target As Labs = New Labs<br />
  Dim Nombre As String = Nothing &#8216;TODO: Initialize to an appropriate value<br />
  Dim Apellido As String = Nothing &#8216;TODO: Initialize to an appropriate value<br />
  Dim expected As String = Nothing<br />
  Dim actual As String<br />
  actual = target.CrearNombreCompleto(Nombre, Apellido)<br />
  Assert.AreEqual(expected, actual, &#8220;TDDEjemplo.Labs.CrearNombreCompleto did not return the expected value.&#8221;)<br />
  Assert.Inconclusive(&#8221;Verify the correctness of this test method.&#8221;)<br />
 End Sub</p>
<p></span></p>
<p>Para poder probar esta función completaremos los valores de estas variables y también la variable <strong>expected</strong>, que es la que almacena el valor esperado para luego comparar con el resultado de la ejecución de la prueba. </p>
<p>El código final quedaría como en el siguiente ejemplo:</p>
<p><span class="codigo"><br />
 &#8221;<br />
 &#8221;A test for CrearNombreCompleto(ByVal String, ByVal String)<br />
 &#8221;<br />
  _<br />
 Public Sub CrearNombreCompletoTest()<br />
  Dim target As Labs = New Labs</p>
<p>  Dim Nombre As String = &#8220;Bruno&#8221;<br />
  Dim Apellido As String = &#8220;Capuano&#8221;<br />
  Dim expected As String = &#8220;Bruno, Capuano&#8221;<br />
  Dim actual As String</p>
<p>  actual = target.CrearNombreCompleto(Nombre, Apellido)</p>
<p>  Assert.AreEqual(expected, actual, &#8220;TDDEjemplo.Labs.CrearNombreCompleto did not return the expected value.&#8221;)</p>
<p> End Sub</p>
<p> &#8221;<br />
 &#8221;A test for ObtenerInformacion()<br />
 &#8221;<br />
  _<br />
 Public Sub ObtenerInformacionTest()<br />
  Dim target As Labs = New Labs</p>
<p>  Dim expected As String = &#8220;Hola Mundo&#8221;<br />
  Dim actual As String</p>
<p>  actual = target.ObtenerInformacion</p>
<p>  Assert.AreEqual(expected, actual, &#8220;TDDEjemplo.Labs.ObtenerInformacion did not return the expected value.&#8221;)</p>
<p> End Sub<br />
</span></p>
<p><em><strong>Nota</strong>: el generador de pruebas unitarias agrega además de la prueba de la función la siguiente sentencia <strong>Assert.Inconclusive(…)</strong>, para verificar que se complete el código de la prueba unitaria; esta línea debe ser eliminada luego de implementada la prueba unitaria ya que la misma no retornará un resultado exitoso si se deja esta llamada.</em></p>
<p>Una vez que hemos completado la definición de las prueba unitarias podemos ejecutar las mismas para evaluar si nuestro componente <strong>TDDEjemplo.Labs</strong>funciona correctamente. Para lanzar el proceso de ejecución de pruebas unitarias debemos seleccionar:</p>
<p>Menú <strong>Test -&gt; Start Selected Test Project with Debugger</strong></p>
<p>Si no hemos cometido ningún error y las pruebas validan esta definición, el resultado debe ser exitoso y lo podremos visualizar en la ventana de <strong>Test Results</strong>;</p>
<p><img src="http://www.netveloper.com/multimedia/articulos/307/4.gif" alt="" /><br />
Ejecución exitosa de las pruebas unitarias.</p>
<p>Si en cambio hemos tenido algún error o hemos dejado la llamada<strong>Assert.Inconclusive(…)</strong>, podremos ver alguno de los siguientes resultados:</p>
<p><a href="http://www.netveloper.com/multimedia/articulos/307/5.gif"><img src="http://www.netveloper.com/multimedia/articulos/307/p_5.gif" border="0" alt="" /></a><br />
Ejecución con errores de las pruebas unitarias.<br />
Fuente: <a href="http://www.netveloper.com/contenido2.aspx?IDC=307_0">http://www.netveloper.com/contenido2.aspx?IDC=307_0</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.finderit.com/net/2009/03/22/tdd-paso-a-paso-utilizando-vsts/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Los espacios de nombres de .NET relacionados con acceso a datos</title>
		<link>http://blog.finderit.com/net/2009/03/22/los-espacios-de-nombres-de-net-relacionados-con-acceso-a-datos/</link>
		<comments>http://blog.finderit.com/net/2009/03/22/los-espacios-de-nombres-de-net-relacionados-con-acceso-a-datos/#comments</comments>
		<pubDate>Sun, 22 Mar 2009 18:56:04 +0000</pubDate>
		<dc:creator>gabi</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.finderit.com/net/?p=96</guid>
		<description><![CDATA[


Siempre que hagamos algo en .NET Framework será mediante las clases que este &#8220;marco&#8221; nos proporciona, esas clases siempre están contenidas en un espacio de nombres (namespace), que no es ni más ni menos que una forma de &#8220;contener&#8221; las distintas clases que podemos usar, pero de forma más o menos organizada.
De esta forma, las [...]]]></description>
			<content:encoded><![CDATA[<table id="Contenido_plantilla_1_1_table5" border="0" cellspacing="0" cellpadding="0" width="649">
<tbody>
<tr>
<td class="texto11pxBlack" colspan="4" width="478" valign="Top">Siempre que hagamos algo en .NET Framework será mediante las clases que este &#8220;marco&#8221; nos proporciona, esas clases siempre están contenidas en un espacio de nombres (namespace), que no es ni más ni menos que una forma de &#8220;contener&#8221; las distintas clases que podemos usar, pero de forma más o menos organizada.<br />
De esta forma, las clases de acceso a datos están todas contenidas en el espacio de nombres <strong>System.Data</strong>. En este espacio de nombres, a su vez existen otros espacios de nombres que contienen clases especializadas según el proveedor de datos que queramos usar, por tanto tendremos espacios de nombres para el acceso a datos de base SQL Server mediante el espacio de nombres<strong>System.Data.SqlClient</strong> o para acceder a bases de datos Oracle, las clases especializadas están incluidas en <strong>System.Data.OracleClient</strong>, aunque siempre tendremos la posibilidad de acceder de forma genérica usando las clases proporcionadas por el espacio de nombres <strong>System.Data.OleDb</strong>, las cuales nos permitirán también acceder a las bases de datos de Access.</p>
<p><strong>Las clases para la manipulación de los datos</strong></p>
<p>Estos espacios de nombres especializados nos permiten conectar con la base de datos, traer los datos indicados a la memoria y después de manipularlos, guardarlos en la base de datos, si es que realmente hemos hecho algún cambio, inserción o eliminación.<br />
En este proceso normalmente necesitaremos tanto clases especializadas dependiendo del origen de datos como clases genéricas para la manipulación de los datos en la memoria, (normalmente en forma desconectada). Por ejemplo, para el acceso a una base de datos de SQL Server, necesitaremos un objeto<strong>SqlConnection</strong> que será el que se encargue de realizar la conexión con la base de datos, un objeto <strong>SqlDataAdapter</strong> que será el que &#8220;realmente&#8221; realice la conexión, obtención de datos y finalmente la actualización en la base de datos de los cambios realizados, el objeto DataAdapter a su vez necesita saber cuales son las acciones que debe realizar con la base de datos, desde que datos obtener hasta que acciones deben aplicarse a la hora de actualizar, eliminar o insertar nuevos datos, todas estas acciones se indicarán por medio de comandos, en este ejemplo de acceso a una base de datos del tipo SQL Server, tendremos que usar objetos Command especializados, concretamente objetos del tipo <strong>SqlCommand</strong>en los que indicaremos las cadena de selección, update, insert y delete a las que, seguramente, ya estamos acostumbrados: SELECT &lt;campos&gt; FROM &lt;tabla&gt; WHERE &lt;condición&gt;.<br />
Para manipular los datos obtenidos, lo habitual será usar un objeto <strong>DataSet</strong> o bien uno del tipo DataTable, en el primer caso, siempre tendremos uno o más objetos del tipo DataTable, dependiendo de la cadena de selección usadas, es decir, si los datos que queremos manipular afecta a una o más tablas e incluso si esa manipulación afecta a ciertas relaciones entre tablas. Independiente de que usemos una o varias tablas, la información que contiene cada tabla está incluida en filas, (una por cada fila o registro de datos), y cada una de las filas a su vez contiene columnas, pero tanto las tablas, filas o columnas son tipos de datos independientes del origen de datos y las clases que representan estos objetos están contenidas en el espacio de nombres System.Data, particularmente en las clases: <strong>DataTable</strong>, <strong>DataRow</strong> y <strong>DataColumn</strong> respectivamente.</p>
<p><strong>Manipulación de datos en modo desconectado</strong></p>
<p>Lo habitual es que la manipulación de datos la hagamos en modo desconectado, que es como sería usando las clases que hemos indicado en el párrafo anterior.<br />
Los pasos a seguir para obtener los datos, trabajar con ellos y finalmente actualizarlos en la base de datos, (independientemente del origen de datos), serían los siguientes:<br />
<strong>1.</strong>Realizamos la conexión con el origen de datos (objeto del tipo Connection)<br />
<strong>2.</strong>Asignamos los objetos que correspondan para obtener los datos (comandos Select, Update, Insert y Delete)<br />
<strong>3.</strong>Obtenemos los datos (mediante un objeto del tipo DataAdapter)<br />
<strong>4.</strong>Manejamos los datos de forma local (desconectada) usando objetos del tipo DataTable.<br />
<strong>5.</strong>Actualizamos los datos en la base de datos usando nuevamente el DataAdapter, obteniendo del DataSet o DataTable las filas nuevas, modificadas o eliminadas.</p>
<p>Veamos con ejemplos cómo realizar cada una de estas tareas, tanto para acceder a una base de datos de SQL <br />
Server como a una de Access, en este último caso, en el ZIP con el código de ejemplo se incluye la base de datos pubs.mdb obtenida a partir de la incluida en los ejemplos de Visual Studio .NET con formato SQL Server.</td>
<td class="texto11pxBlack" width="163" align="center" valign="top"> </td>
<td width="4"> </td>
</tr>
<tr>
<td width="4"> <br />
Fuente: <a href="http://www.netveloper.com/contenido2.aspx?IDC=181_0">http://www.netveloper.com/contenido2.aspx?IDC=181_0</a></td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://blog.finderit.com/net/2009/03/22/los-espacios-de-nombres-de-net-relacionados-con-acceso-a-datos/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Silverlight 2.0 Beta 2 no se integra correctamente con ADO .net Entity Framework</title>
		<link>http://blog.finderit.com/net/2009/03/22/silverlight-20-beta-2-no-se-integra-correctamente-con-ado-net-entity-framework/</link>
		<comments>http://blog.finderit.com/net/2009/03/22/silverlight-20-beta-2-no-se-integra-correctamente-con-ado-net-entity-framework/#comments</comments>
		<pubDate>Sun, 22 Mar 2009 18:54:04 +0000</pubDate>
		<dc:creator>gabi</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.finderit.com/net/?p=95</guid>
		<description><![CDATA[


Resumen post:No hace mucho que Microsoft publicó el Service Pack 1 de Visual Studio 2008, uno de las características más esperadas de este service pack es la RTM de ADO .net Entity Framework. ¿ Se integra esta tecnología con Silverlight + WCF? En teoría si, en la práctica&#8230;


Post:

No hace mucho que Microsoft publicó el Service [...]]]></description>
			<content:encoded><![CDATA[<table border="0" width="580px">
<tbody>
<tr>
<td colspan="2"><strong>Resumen post:</strong>No hace mucho que Microsoft publicó el Service Pack 1 de Visual Studio 2008, uno de las características más esperadas de este service pack es la RTM de ADO .net Entity Framework. ¿ Se integra esta tecnología con Silverlight + WCF? En teoría si, en la práctica&#8230;</td>
</tr>
<tr>
<td colspan="3"><strong>Post:</strong></p>
<div id="ctl00_ma_BlogNav_ctl00_pnlComment">
<p>No hace mucho que Microsoft publicó el Service Pack 1 de Visual Studio 2008, uno de las características más esperadas de este service pack es la RTM de ADO .net Entity Framework,</p>
<p>En el número de Julio de la revista MSDN Magazine, hay un artículo muy interesante escrito por John Papa: <a href="http://msdn.microsoft.com/en-us/magazine/cc700340.aspx">The Entity Framework In Layered Architectures</a> Hay puedes encontrar como montar una arquitectura de ultima generación, utilizando: there you will find how to build up a cutting</p>
<table border="0">
<tbody>
<tr>
<td width="50px"> </td>
<td>
<ul>
<li>&#8211;&gt; Front End / UI (capa de presentación): WPF (Windows Presentation Foundation).</li>
<li>&#8211;&gt; Service Layer (capa de servicios): WCF (Windows Communication Foundation).</li>
<li>&#8211;&gt; DAL / Data Access Layer (capa de acceso a datos): ADO .net Entity Framework.</li>
</ul>
</td>
</tr>
</tbody>
</table>
<p>La mayoría de los frikis que leimos este artículo, pensamos: <em>¡¡ TOOMAAA !! seguro que esto se puede portar a Silverlight</em>, en vez de preguntarnos&#8230; <em>Por qué los ejemplos no se han hecho utilizando Silverlight ?</em>.</p>
<p>El tema es que&#8230; tu empiezas a construir tu solucion: generas la capa de presentación, expones servicios de WCF y hacemos que se comuniquen con tu frontend Silverlight Beta 2, pero el problema viene cuando intentas serializar entitdades ADO .net, ¿ Por qué es tan importante esta serializacion?:</p>
<table border="0">
<tbody>
<tr>
<td width="50px"> </td>
<td>
<ul>
<li>&#8211;&gt; Una de las características más potentes de ADO .net entity framework es que los objetos de entidad se pueden serializar</li>
<li>&#8211;&gt; Esto quiere decir que los podemos pasar entre capas, incluso via servicios web.</li>
<li>&#8211;&gt; Guarda un montón de informacíon util acerca de tu entidad.</li>
<li>&#8211;&gt; Te libera de tener que hacerte mano tus propias clases de entidad.</li>
</ul>
</td>
</tr>
</tbody>
</table>
<p>Te das cuenta de que las cosas no funciona, cuando añades a tu proyecto Silverlight añades la referencia al servicio WCF e intentas compilar, obtienes el siguiente mensaje de error:</p>
<p><em>&#8216;System.Runtime.Serialization.DataContractAttribute&#8217; does not contain a definition for &#8216;IsReference&#8217;</em></p>
<p>Qué corresponde al código autogenerado del proxy:</p>
<pre>
[System.Runtime.Serialization.DataContractAttribute(Name="StructuralObject",
Namespace="http://schemas.datacontract.org/2004/07/System.Data.Objects.DataClasses",
<strong>IsReference=true</strong>)]</pre>
<p>Si empiezas a buscar por google, encuentras algunas respuesta a los foros que tienen peligro: <em>desinstala todo tu visual studio y todo lo que pilles y vuelve a reinstalar</em>, <strong>NO HAGAS ESO, ESPERA A TERMINAR DE LEER ESTE POST</strong></p>
<p><strong>¿ Qué dicen los chicos de MS sobre sto ?</strong></p>
<p>Commentario 1:</p>
<p><em>The mismatch of the Client library and the Server dll is fixed in later releases of the Silverlight SDK. You will be able to use the EF generated types in your SIlverlight application in the near future . Unfortunately , I can&#8217;t give you a date of when the next Silverlight SDK is gonna be released , but rest assured , this scenario WILL work when the next Silverligtht SDK ships</em></p>
<p>Comentario 2:</p>
<p><em>Hi, as discussed earlier, support for IsReference will be added in RTW.</em></p>
<p><strong>¿ Hay algun truco para evitar esto?</strong></p>
<p>Si quieres que tu codigo compile puede quitar del código autogenerado <em>IsReference=True</em>,<strong>pero entonces te encontrarás con inconsistencias en los objetos serializados :-(.</strong>.</p>
<p>Parece que tendremos que esperar a la version RTW.</p>
<p>Mi opinión: es normal que una versión Beta de un producto tenga fallos, es normal que el equipo de desarrollo de Ms no pueda estar sacando parches en caliente cada dos por tres, y se tiene que centrar en su iteraciones y sprints, pero deberían de tener una página oficial actualizada cada día que informara de errores conocidos en la versión actual, es decepcionante encontrarte con un error, mirar en un foro, reinstalar tu Visual Studio de cabo a raro, y al rato darte cuenta de que.. &#8220;uy&#8230; pero si era un bug&#8221;.</p>
<p>Fuente: <a href="http://www.tipsdotnet.com/TechBlogESP.aspx?PageIndex=0&amp;BLID=10">http://www.tipsdotnet.com/TechBlogESP.aspx?PageIndex=0&amp;BLID=10</a></p>
</div>
</td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://blog.finderit.com/net/2009/03/22/silverlight-20-beta-2-no-se-integra-correctamente-con-ado-net-entity-framework/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Nuevo Visual Studio 2008 y .NET Framework 3.5</title>
		<link>http://blog.finderit.com/net/2009/03/22/nuevo-visual-studio-2008-y-net-framework-35/</link>
		<comments>http://blog.finderit.com/net/2009/03/22/nuevo-visual-studio-2008-y-net-framework-35/#comments</comments>
		<pubDate>Sun, 22 Mar 2009 18:46:55 +0000</pubDate>
		<dc:creator>gabi</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.finderit.com/net/?p=94</guid>
		<description><![CDATA[Microsoft lanzó su nueva edición de Visual Studio 2008 acompañada de su herramienta principal .NET Framework 3.5, ambos han sido anunciados.
 
 
La nueva versión incorpora mas de 250 nuevas características que no se encuentran en las versiones Express de Visual Studio. Se agregó el soporte para LINQ (Language Integrated Query)
que es tomada como una aplicación rápida de desarrollo. Esta
herramienta ayuda para [...]]]></description>
			<content:encoded><![CDATA[<p align="left">Microsoft lanzó su nueva edición de <strong>Visual Studio 2008</strong> acompañada de su herramienta principal <strong>.NET Framework 3.5</strong>, ambos han sido anunciados.</p>
<p> </p>
<p> </p>
<p align="left">La nueva versión incorpora mas de 250 nuevas características que no se encuentran en las versiones<strong> Express de Visual Studio</strong>. Se agregó el soporte para <strong>LINQ (Language Integrated Query)</strong><br />
que es tomada como una aplicación rápida de desarrollo. Esta<br />
herramienta ayuda para que el programador sepa que dato es el que<br />
realmente necesita, en vez de estar pensando en la complejidad de las<br />
solicitudes de datos. LINQ puede asociarse fácilmente con <strong>C# o Visual Basic con SQL</strong>.</p>
<p align="left">También la nueva versión te permitirá abrir, editar y construir aplicaciones <strong>.NET 2.0 y ASP.NET 2.0</strong> (incluyendo aplicaciones ASP.NET 2.0 usando ASP.NET AJAX 1.0).</p>
<p align="left">La nueva versión de Framework 3.5 incluye características para el desarrollo de la Web 2.0, <strong>Service-Oriented Architecture</strong><br />
y software de servicios adicionales basados en aplicaciones. Su<br />
lanzamiento general y venta al publico será hasta le próximo año, pero<br />
si estás subscrito a MSDN, podrás <a href="http://msdn2.microsoft.com/en-us/vstudio/default.aspx">bajar</a> una versión Express de esta versión.</p>
<p align="left">Fuente: <a href="http://www.programacion.com/noticia/1562/">http://www.programacion.com/noticia/1562/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.finderit.com/net/2009/03/22/nuevo-visual-studio-2008-y-net-framework-35/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Diez cosas a saber sobre Visual Studio 2008 y .NET Framework 3.5</title>
		<link>http://blog.finderit.com/net/2009/03/22/diez-cosas-a-saber-sobre-visual-studio-2008-y-net-framework-35/</link>
		<comments>http://blog.finderit.com/net/2009/03/22/diez-cosas-a-saber-sobre-visual-studio-2008-y-net-framework-35/#comments</comments>
		<pubDate>Sun, 22 Mar 2009 18:39:09 +0000</pubDate>
		<dc:creator>gabi</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.finderit.com/net/?p=93</guid>
		<description><![CDATA[Días atrás, Daniel Moth, desarrollador de Microsoft, publicaba un interesante post comentando 10 puntos importantes a saber sobre el nuevo Visual Studio 2008 y .NET framework 3.5 y la verdad es que no tienen desperdicio.
1. Lanzamiento
Visual Studio 2008 y .NET framework 3.5 serán lanzados oficialmente juntos el próximo febrero. Sin embargo, estará disponible para desarrolladores a finales [...]]]></description>
			<content:encoded><![CDATA[<p>Días atrás, Daniel Moth, desarrollador de Microsoft, publicaba un interesante post comentando <a href="http://www.danielmoth.com/Blog/2007/11/top-10-things-to-know-about-visual.html"><span style="color: #223344">10 puntos importantes a saber sobre el nuevo Visual Studio 2008 y .NET framework 3.5</span></a> y la verdad es que no tienen desperdicio.</p>
<p><strong>1. Lanzamiento</strong><br />
Visual Studio 2008 y .NET framework 3.5 serán lanzados oficialmente juntos el próximo febrero. Sin embargo, estará disponible para desarrolladores a finales de noviembre de 2007.<br />
Afortunadamente, estarán disponibles las versiones Express de C#, VB, C++ y Web, así como las Profesionales (¡con soporte de testeos unitarios!), Estándar y ediciones de equipos de desarrollo. La novedad será Visual Studio 2008 Shell, de carácter gratuito, que permitirá crear lenguajes y herramientas de desarrollo más verticalizadas.</p>
<p>Daniel comenta también que bajo Windows Vista, VS2008 será espectacular, e incluirá mejoras para la depuración de múltiples hilos. Ya no hay excusa para quedarnos con WXP ;-P</p>
<p><strong>2. Compatibilidad hacia atrás</strong><br />
.NET framework 3.5 continúa la línea iniciada por Fx3.0 en cuanto al mantenimiento del CLR. Por tanto, y dado que lo único que hace es añadir ensamblados a las librerías presentes con las versiones 2.0 y 3.0 del framework, las aplicaciones actuales no se verán afectadas. Eso sí, necesitará los Service Packs 1 de ambas plataformas.</p>
<p><strong>3. Generación multiplataforma</strong><br />
Visual Studio 2008 incluye la capacidad de crear proyectos para múltiples plataformas .NET, es decir, la 2.0, 3.0 y 3.5, desde el mismo entorno. Por tanto, no será necesario tener VS2005 instalado para generar ensamblados para .NET 2.0.</p>
<p><strong>4. Multitud de novedades en C# 3.0 y VB9</strong><br />
Propiedades automáticas, <a href="http://www.danielmoth.com/Blog/2007/08/relaxed-delegates.html"><span style="color: #223344">delegados &#8220;relajados&#8221;</span></a>, inicializadores de objetos, inferencia de tipos, tipos anónimos, métodos de extensión, funciones lambda y métodos parciales, entre otros.</p>
<p>Pero no sólo eso&#8230; dado el punto 3 (generación multiplataforma), podremos usar estas nuevas características de nuestros lenguajes favoritos y generar para .NET 2.0.</p>
<p><strong>5. LINQ</strong><br />
Se trata de una de las grandes revoluciones que nos aportará este nuevo conjunto de herramientas. Language INtegrated Query es <a href="http://www.variablenotfound.com/2006/05/linq-integracin-de-consultas-en-el.html"><span style="color: #445566">un nuevo método de acceso a datos</span></a> totalmente integrado en nuestro lenguaje habitual y de una forma muy independiente de la fuente de donde provengan (colecciones, XML, motores de bases de datos, etc.).</p>
<p><strong>6. Novedades para ASP.NET</strong><br />
Visual Studio, así como el nuevo framework, ya incluirán ASP.NET AJAX de serie, así como <a href="http://www.danielmoth.com/Blog/2007/08/aspnet-35-controls.html"><span style="color: #223344">3 nuevos controles</span></a> (ListView, DataPager y LinqDataSource). Además, el IDE ha sido muy mejorado e incluye soporte para intellisense y depuración de Javascripts, ¡también para ASP.NET 2.0!, y un nuevo diseñador que permite anidar páginas maestras.</p>
<p><strong>7. Para el desarrollo en cliente</strong><br />
VS2008 incluirá nuevas plantillas de proyectos, así como un diseñador para WPF integrado con soporte para la comunicación WPF-WinForms. También se ha añadido el soporte para Firefox de la tecnología ClickOnce y<a href="http://www.xbap.org/"><span style="color: #223344">XBAP</span></a> (XAML Browser Applications).</p>
<p><strong>8. Para el desarrollador de Office</strong><br />
Se ofrece soporte total para la personalizaciones (customisations) de Office 2007, así como para las plantillas de Office 2003.</p>
<p><strong>9. Para desarrollo en servidor</strong><br />
Se han incluido nuevas plantillas para WCF y WF, y se han introducido <a href="http://blogs.thinktecture.com/cweyer/archive/2007/10/29/414951.aspx"><span style="color: #223344">mejoras interesantes</span></a> en el primero, como el modelo de programación HTTP (sin SOAP) o serialización JSON.</p>
<p><strong>10. Para el desarrollo en dispositivos móviles</strong><br />
Hay decenas de nuevas características, como el soporte para las versiones compactas de LINQ y WPF, o, a nivel de IDE, Unit Testing for Devices.</p>
<p><strong>11. (punto extra) Código del framework</strong><br />
Pues sí, como ya es sabido, podremos depurar nuestras aplicaciones siguiendo el rastro por el interior de las clases y métodos del framework <span style="text-decoration: line-through">(como si no tuviéramos suficiente con las nuestras ;-))</span>.</p>
<p>Fuente: <a href="http://www.clikear.com/diez_cosas_saber_12876.aspx">http://www.clikear.com/diez_cosas_saber_12876.aspx</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.finderit.com/net/2009/03/22/diez-cosas-a-saber-sobre-visual-studio-2008-y-net-framework-35/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
