31 marzo 2007

MyIP.es, encuentra tu IP en Google Maps

Revisando como siempre algunos blogs amigos (en este caso fue el de Cristian Quintana's), encontré este articulo que me pareció interesante, consiste en una aplicación web que a partir de nuestra dirección IP publica, muestra una serie de datos sobre la localización del sitio físico...

Yo había oído hablar de esto, pero les confieso que solo lo hacían los servicios de seguridad del estado.

El vinculo es el siguiente MyIP.es

30 marzo 2007

Implementando SqlTransaction en un TableAdapters...

Saludos amigos...

Les comento algo antes de entrar al tema, yo trabaje mucho con DAAB (Data Access Application Block) me estudie lo básico del DAAB y mis pocas aplicaciones que he implante me funcionaron, recientemente comencé un nuevo proyecto y decidí hacerlo desde cero, haber que cosas se me ocurrían de nuevo y salir un poco de los código rutinarios – copiar y pegar - (ustedes saben cuando uno ya forma parte de un comunidad global – labloquera.net – ya se cree un MVP) y decidí aventurarme con los TableAdapters, hijos míos mayor sorpresa me andado, es increíble el poder que tienes, la facilidad de uso y lo rápido que lo implementas. Todos mis TableAdapters están conectados con Procedimientos Almacenados (Select, Insert, Update y Delete), agregué un nuevo campo a una tabla y actualice los procedimientos almacenado para agregar este nuevo campo (esto lo realice en la base de datos – SQL Server 2005) y después ejecutas un re-configuración del TableAdapter, esto te genera todo de nuevo otra vez y lo mas bonito de esto sabes que es…? No escribiste ni una línea de código…! Como se le podrá llamar a esto Magia o RAD.

TableAdapter Configuration


Esto esto parece increíble y quisas muy difícil, pero realmente es mucho mas facil de lo que se inmaginan. No crean que esto lo descubri yo (no me sente bajo un arbol y una manzana me golpeo la cabeza) simplemente busque en Internet, conseguí varias personas y paginas web que preguntaban y deseaban hacer lo mismo que yo queria. Comenze a probar e investigar la mayoria estaban perdidos, solo unas pocas paginas web se acercaban a esto. Anexo fuente de datos:

http://blah.winsmarts.com/2006/06/18/the-definitive-tableadapters--transactions-blog-post.aspx (escrita por Sahil Malik-“Pro ADO.NET 2.0”)
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=301804&SiteID=1 (Forum de Microsoft MSDN)

Las transacciones van pegadas a los objetos command de los TableAdapter (Insert, Update, Delete) dependiendo del caso…


SqlTransaction tran = IndiqueLaConnection.BeginTransaction();

this.Adapter.UpdateCommand.Transaction = tran;

this.Adapter.InsertCommand.Transaction = tran;

this.Adapter.DeleteCommand.Transaction = tran;

Les explico como hacer esto en varios pasos…

Paso 1.-
Seleccionamos un DataTable, para este caso nuestra DataTable es Productos y el TableAdapter que trabajaremos es ProductosTableAdapter.

ProductosTableAdapter

Nota: La forma de trabajar los TableAdapters, es mediante las clases parciales (partial class) todo los que escribamos en el archivo .Designer.cs, se perderá en cualquier cambio o pestañeo que se realice el DataSet, debido a que este es un archivo generado.

Soluction Explorer

Y Como se crean una clase parcial (partial class) de un TableAdapter..?
Sencillo haciendo Doble Click con el raton – Mouse – en los metodos “Fill,GetData()” o en cualquier otro. Automáticamente se abrirá un archivo que contiene nuestra clase parcial.

namespace Admin.DAL._ProductosTableAdapters
{
public partial class ProductosTableAdapter : System.ComponentModel.Component
{
}
}

Aquí es donde añadiremos el código para manejar a nuestro gusto el TableAdapter (crearemos un mostró como frankiTableAdapter – esperemos que no se nos salga de control.)

FrankiTableAdapter

Paso 2.-
Agregar los métodos que nos ayudaran a controlar la transacción, los métodos para abrir la conexión, cerrar la conexión y comenzar la transacción. Debemos recordar que los TableAdapter controlan nuestra bodega de datos (ellos compran por nosotros, venden por nosotros, reciben el cambio por nosotros y nos entregan el producto a nosotros), es decir abre la conexión a la base de datos, ejecuta la instrucción (select,insert,update,delete) o nos devuelve los datos y por ultimo cierra la conexión. Y estos nuevos métodos los agregaremos dentro de nuestra clase parcial que vimos anteriormente.

namespace Admin.DAL._ProductosTableAdapters

{

public partial class ProductosTableAdapter : System.ComponentModel.Component

{

// Abrir la conexion a la base de datos

public SqlConnection OpenConnection()

{

// Abre la conexion a la base de datos en caso de estar cerrada

if (_connection.State != System.Data.ConnectionState.Open)

_connection.Open();

// retorna la conexion

return _connection;

}

// Cierra la conexión

public void CloseConnection()

{

// si se dan cuenta no he definido la variable "_connection"

// es porque me la estoy utilizandola de la clase parcial

// que ya se definio y se encuentra en el archivo productos.Designer.cs

_connection.Close();

}


// Arrancamos la transacción

public SqlTransaction BeginTransactionUpdate(SqlConnection IndiqueLaConnection)

{

// Verificamos de nuevo el estado de la conexion - soy un paranoico -

if (IndiqueLaConnection.State == System.Data.ConnectionState.Closed)

{

throw new Exception("La conección esta cerrado, por lo tanto no se puede realizar una nueva transacción");

}

// Comensamos una nueva transaccion a partir de la conexión que estamos pasando

// esta la asignamos a una variable "tran" de SqlTransaccion

SqlTransaction tran = IndiqueLaConnection.BeginTransaction();

// this.Adapter => es un metodo definido por el TableAdapter

// dentro del archivo Productos.Designer.cs

// Asignamos al metodo ".Transaction" de cada uno de los comandos

// (insert, update, delete) del TableAdapter el objeto SqlTransaccion

// contenido en la variable "tran"

this.Adapter.UpdateCommand.Transaction = tran;

this.Adapter.InsertCommand.Transaction = tran;

this.Adapter.DeleteCommand.Transaction = tran;

// Y por ultimo retornamos el objeto SqlTransaccion

// si alguien mas la necesita...

return tran;

}

}

}

Paso 3.-

Como implementamos esto dentro de nuestro código, de esta forma;

void tbttAceptar_Click(object sender, EventArgs e)
{
ProductosTableAdapter
elProducto = new ProductosTableAdapter();
System.Data.SqlClient.SqlConnection tableAdapConn = null;
System.Data.SqlClient.SqlTransaction tableAdapTran = null;
try
{
tableAdapConn = this.elProducto.OpenConnection();
tableAdapTran = this.elProducto.BeginTransactionUpdate(tableAdapConn);
// Colocas en este espacio tu transaccion
this.elProducto.Update(this._Productos.Productos);
tableAdapTran.Commit();
}
catch (Exception ex1)
{
MessageBox.Show(ex1.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Error);
tableAdapTran.Rollback();
}
finally
{
tableAdapConn.Close();
}
}

Paso 4.-
Lo mas probable es que tengas otros TableAdapter (DepartamentosTableAdapter, ProveedoresTableAdapter, etc) y es realmente cuando se debe utilizar transacciones porque estas trabajando con varias actualizaciones en un solo bloque, si alguna actualización falla se debe ejecutar un rollback() y con esto nos reversara las actualizaciones anteriormente realizadas a la falla (ya sea un insert, un delete o un update). El código seria el siguiente, por supuesto añadiendo a la clase partial de los TableAdapter lo anteriormente descrito en el paso 1 y añadiendo un nuevo metodo al paso 2.

Agregar nuevo método al Paso 2 – TransaccionUpdate (sqlTransaccion xxxx) para este caso trabajaremos con otro TableAdapter (DepartamentosTableAdapter)


public partial class DepartamentosTableAdapter : System.ComponentModel.Component

{

// Abrir la conexion a la base de datos

public SqlConnection OpenConnection()…

// Cierra la conexión

public void CloseConnection()…

// Arrancamos la transacción

public SqlTransaction BeginTransactionUpdate(SqlConnection IndiqueLaConnection)…

// Utilizamos la transaccion anterior

public bool TransactionUpdate(SqlTransaction miTransaccion)

{

bool reval = false;

if (miTransaccion.Connection.State == System.Data.ConnectionState.Open)

{

this.Adapter.UpdateCommand.Transaction = miTransaccion;

this.Adapter.InsertCommand.Transaction = miTransaccion;

this.Adapter.DeleteCommand.Transaction = miTransaccion;

reval = true;

}

return reval;

}

}

Este método lo su única función es utilizar un transacción existente y asignarla al método “Transacción” de los comandos del TableAdapter. Y como se implementa es nuevo código, de la siguiente manera…


System.Data.SqlClient.SqlConnection tableAdapConn = null;

System.Data.SqlClient.SqlTransaction tableAdapTranProd = null;

try

{

tableAdapConn = this.elProducto.OpenConnection();

tableAdapTranProd = this.elProducto.BeginTransactionUpdate(tableAdapConn);

this.elDepartamento.TransactionUpdate(tableAdapTranProd);

// Colocas en este espacio tu transaccion

this.elProducto.Update(this._Productos.Productos);

this.elDepartamento.Update(this._Productos.Departamentos);

// el objeto tableAdapTranProd control la transaccion de

// elProducto y elDepartamento (ambos TableAdapter)

tableAdapTranProd.Commit();

}

catch (Exception ex1)

{

MessageBox.Show(ex1.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Error);

tableAdapTranProd.Rollback();

}

finally

{

tableAdapConn.Close();

}

Hay que recordar que ambos TableAdapters estan dentro de un DataSet y por lo tanto poseen la misma conexión a la base de datos y eso me permite utilizar la misma Transacción.

DataSet - Productos

En caso de tener conexiones diferentes o apuntaran a diferentes bases de datos, tendría que aplicar otra arquitectura de transacción como MSDTC (Microsoft Distributed Transaction Coordinator) mediante el namespace “System.Transactions”, pero como dice el final de toda historia ¡Ese es otro articulo, que estaré hablando en otro post.!

Y Gracias por leer...

Nota: Disculpen el mal formato del codigo que sé que dificulta un poco la comprencion, realmente no se como acomodarlo si alguien me ayuda, se lo agradeceria.
Tambien lo pueden leer de la bloguera.net creo que esta un poco mejor...

24 marzo 2007

ebook "Introducing Microsoft Code Name Atlas"

Recientemente microsoft puso a las disposición de la comunidad un ebook (libro en formato digital), acerca de AJAX. Este libro escrito por Dino Esposito (miembro de Solid Quality Learning) cubre la versión CTP de Agosto del 2006, esta en ingles para variar o cosa rara muestra una idea clara lo que es AJAX, posee suficiente ejemplos graficos una imagen vale mas que mil palabras y describe un poco el Ajax Tool Kit (version beta), realmente recomendado...

Ya varios blog realizan comentarios del libro y a puntan al link para su descarga; Jorge Serrano, Scattered Notes, Mentores.NET & otros.

Para descargar el ebook: Introducing Microsoft Code Name Atlas

Las Virtual Machines disponibles del MSDN - Ampliando

Ampliando un poco el articulo del Bruno Las Virtual Machines disponibles del MSDN. El sito web de Microsft Virtual PC 2007, posee una cantidad de opciones y es un laberinto interminable de conocimiento como todo los sitios de microsoft, pero realmente a nosotros nos importa un bledo interesa que las aplicaciones que bajamos de estos sitos funcionen lo mas rápido posible (bajamos, instalamos, probamos y funciona ya....!).

Con Microsoft Virtual PC sucede lo mismo a mi parecer queremos montar la maquina virtual, ejecutar o probar nuestra aplicación y borrar la maquina virtual de nuestro PC. Existe un link que nos permite bajar los VHD que tanto nos interesa y para remate hay una gran cantidad de VHD para Virtual PC:

Enlace de Virtual Hard Disk http://www.microsoft.com/vhd

Nuevo blog -labloguera.net/blogs/elperucho-

Saludos a todos...
He conseguido otro espacio en el blog "labloguera.net", realmente esta orientado a la divulgación de la tecnología .net, realmente de los 3 blog que es probado este es el mas completo que he visto.
bueno después les describo las características de este blog...
Continuare escribiendo en los dos blog, porque realmente no se como se hacer que se muestre el contenido de un articulo en otro blog...

La dirección es la siguiente: http://labloguera.net/blogs/elperucho/default.aspx

Adios al viejo zorro...

Hola como siempre son las 12:47 a.m. y no concilio el sueño por supuesto hoy ya es sábado y me levanto un poco tarde, revisando los blog de mis amigos, encontré una triste noticia (específicamente el blog del el bruno), "FoxPRO a partir de ahora es de todos..."

No se liberaran mas versiones de Visual FoxPro después de 9.0 por parte de Microsoft, pero tendrá soporte hasta el 2015, es pasara a CODEPLEX como un proyecto de software libre para que la comunidad de desarrolladores continúen la evolución del mismo. Yo desarrolle dos proyectos en FoxPRO cuando se desarrollaba bajo DOS, existían cosas que no entendía los objetos y muchas otras, asi que regrese a mi viejo y obsoleto Clipper como lo amaba, me sentía como pes en el agua. Después Microsoft adquiere FoxPRO y computer associates adquiere Clipper, días oscuros en la vida de cualquier programador en Clipper y días azules para los desarrolladores de FoxPRO.

Bueno amigos de FoxPRO, nosotros los desarrolladores de C# les damos nuestro mas sentido ... y lo difrutamos porque desarrollador que no ha cambiado de lenguaje en cinco años, no le ha visto bien las piernas a la vecina...

Fuente del Articulo :El Bruno

Pagina Oficial de Visual FoxPro (español)

Wikipedia - Visual FoxPro (español)

12 marzo 2007

ASP.NET AJAX para aplicaciones existentes


Extraído del blog de Sergio Tarrillo's.
Nos comenta Sergio en si blog, el como configurar Ajax para nuestras apliciones existentes y por su puesto nos envía a la pagina de Ajax.net donde se encuentra una mayor explicación.

Blog de Sergio Tarrillo's
AJAX para aplicaciones existentes

Si los desarrolladores construyesemos aviones

Excelente articulo extraido del blog de el bruno



Que loquera....

Club Starter Kit 2.0 (con ASP.NET AJAX)

Microsft ha creado un la nueva versión de Club Starter Kit 2.0 (bueno realmente esta en la versión beta 2) . Posee una gran cantidad de contenido y nuevas características, con el fin de realizar un web site de altura (por supuesto con AJAX 1.0).

Características:

* Corrección de Bugs
* Soporte para foros.
* Editor FCK.
* Administración Web.
* Servicio de RSS.
* Páginas web de noticias con formato para impresión.
* Páginas web de calendario con formato para impresión.
* ASPNETDB.mdf incluido dentro de la base de datos principal.
* Blogs. (básico para una comunidad).
* Módulo RSVP.
* ASP.NET AJAX.
* Newsletter .
* CMS.

Para la versión RC1 se planea las siguientes features:

* Searching.
* Nuevos Themes.

En toda comunidad y sitio Web, que ofrece servicio de noticias, es básico tener el servicio de RSS. Además que a toda comunidad enriquece tener blogs para los miembros, y los foros para escuchar y dar feedback a los usuarios, también es básico. Y si a eso le sumamos ASP.NET AJAX, Club Starter Kit 2.0 se esta convirtiendo en un sitio Web a la altura de Web 2.0. Ahora tenemos la oportunidad, que esta en versión beta, de pedir lo que creamos que le hace falta para ser un Club Web Site completo.

Fuente del Articulo: Blog de Sergio Tarrillo's
Download Codeplex: Club Starter Kit 2.0
Pagina del Proyecto:
Club Starter Kit 2.0


Saludos y lo disfruten...

11 marzo 2007

Andean Web Day




¿Estás pensando en desarrollar aplicaciones Web?
¿Estás realizando algún proyecto con tecnologías Web y aún no has decidido que tecnología usar?

¡En este evento podrás ver las tendencias y tecnologías que existen hoy para el desarrollo de software orientado al WEB!

Ven y comparte con nosotros técnicas y mejores prácticas, y entérate de lo que te brindará la tecnología Microsoft en los próximos meses.



Duración Descripción
0:45 min
Desarrollo web: Más allá de ASP .NET 2.0
1:15 min
Patrones de implementación para Asp.Net Ajax - Aplicaciones web asíncronas
0:15 min Break
1:15 min
Creando tu primera aplicación XAML
1:30 min
Expression Blend: ¡Desarrollando interfaces espectaculares!

Valencia
20/03/2007 Cines Unidos, Sambil Valencia Sala 1
Urb. Moñongo, C.C Sambil-Valencia, entre 2da y 3era Base, Naguanagua, Venezuela

Registro: 8:00 AM Inicio: 8:30 AM Fin: 12:30 PM

Inscríbete!
Maracaibo
22/03/2007

Cines Unidos, Sambil Maracaibo Sala 2
Sambil Maracaibo, Av. Guajira, Maracaibo, Venezuela


Registro: 8:00 AM Inicio: 8:30 AM Fin: 12:30 PM

Inscríbete!
San Cristobal
27/03/2007 Cines Unidos, Sambil San Cristóbal Sala 7
Sector Sabana Larga, Av. Libertador, Nivel Autopista,
San Cristóbal, Venezuela

Registro: 8:00 AM Inicio: 8:30 AM Fin: 12:30 PM

Inscríbete!
Puerto Ordaz
29/03/2007 Cines Unidos, C.C. Orinokia Sala 7
Centro Comercial Orinokia, Puerto Ordaz, Venezuela

Registro: 8:00 AM Inicio: 8:30 AM Fin: 12:30 PM

Inscríbete!
Caracas
03/04/2007 Cines Unidos, Sambil Caracas Sala 3
Av. Libertador, C.C Sambil, Nivel Autopista, Plaza la Música, Urb. Chacao, Caracas, Venezuela

Registro: 8:00 AM Inicio: 8:30 AM Fin: 12:30 PM

Inscríbete!

Recuerde confirmar su asistencia comunicándose con el Centro de Atencion al cliente de Microsoft
Colombia
4010404 (Bogotá) ó 01 8000 5 10595 y 01 8000 9 10595
Ecuador
1 800 258025
Perú
595-0500 - 0 800 51900
Venezuela
0 800 6427676 - 0 800 MICROSOFT

"Invitación al Solid Quality Summit Latinoamerica 2007"

Continuando con el articulo de"Invitación al Solid Quality Summit Latinoamerica 2007" publicado en el blog de mi amigo William Chiquito, tan fue la inquietud que le envie un correo a Federico Bazo Alfaro (Organizador del Evento):

Hola Pedro:


Un placer saludarte.


Tal y como me lo comentas Venezuela no esta en la lista de países actualmente, sin embargo no descartes aun la posibilidad de que agreguemos a tu país a la gira, la segunda parte de la gira visita Uruguay, Chile, Argentina y Brazil y perfectamente podemos agregar la parada en Venezuela esto depende mucho del apoyo que tengamos de parte de Microsoft y algunos otros sponsors.

Saludos y gracias por escribirnos,

Federico Bazo

cid:image001.jpg@01C74FB9.B12B0880

From: Pedro Obando [mailto:pedroobando@hotmail.com]
Sent: Tuesday, March 06, 2007 6:11 PM
To: Federico Bazo Alfaro
Subject: Saludos desde Venezuela

Saludos Federico,

Soy Pedro Obando de la comunidad de desarrolladores (.NET & SQLServer - mug.net Venezuela) de Venezuela
Veo que comienza la gira casi por tada latino america y no veo mi pais Venezuela, porque no desean venir a venezuela
La comunidad venezola tambien es importante. y por favor tomenos en cuenta para la proxima gira...

Un caluroso saludos desde Venezuela Pedro Obando...


Comunidad todo depende de nuestra unión y nuestro interes.

02 marzo 2007

Just Released: Enterprise Library 3.0 February 2007 CTP

"Just Released: Enterprise Library 3.0 February 2007 CTP", es el titulo que escribe nuestro amigo Tom Hollander's en su blog.
"Éste es el CTP antes del lanzamiento oficial de la EntLib 3.0, que se espera alrededor de un mes de ahora en adelante."

Release EntLib3.0 Feb2007CTP Beta

Tom Hollander's Blog