Excelente curso de desarrollo web con ASP.NET

20 de Mayo, 2008

navegando en la web de Microsoft, encontr茅 este excelente recurso que nos ayudar谩 a todos los que traveseamos el web.

Ac谩 est谩 el link
http://www.data2max.com/gpuntonet/foro/asp-net/excelente-curso-de-desarrollo-web-con-vwd-2005-express/0/

Charla de Acceso a datos

17 de Mayo, 2008

Tuve la oportunidad de dar la charla introductoria de acceso a datos en la c茅lula acad茅mica Microsoft de Desarrollo Web de la UFG, por lo que publico la presentaci贸n para su estudio.

En ella estudiamos los m茅todos de conexi贸n a una base de datos (Conectado y Desconectado), as铆 como la ejecuci贸n de una consulta sencilla mediante c贸digo (siempre en C#). Luego vimos los asistentes para enlazar datos a controles, lo cual nos facilita mucho esta tarea y nos ahorra muchos minutos de programaci贸n.

Pueden descargar la presentaci贸n y un video demostrativo (conexion con una BD oracle) de

http://www.archisoftware.net/gnet/14-May-08 Acceso a datos.zip

Introducci贸n a LINQ y una consulta sencilla.

26 de Abril, 2008

Con el desarrollo del proyecto de la Imagine Cup 08 de Microsoft, tuve que aprender a usar esta nueva tecnolog铆a de Microsoft, llamada LINQ, de la cual voy a (intentar) explicar acerca de ella.

Segun Wikipedia, Language Integrated Query (LINQ) es un proyecto de Microsoft que agrega consultas nativas semejantes a las de SQL a los lenguajes del .NET Framework, inicialmente a los lenguajes Visual Basic .NET y C#.

LINQ define operadores de consulta est谩ndar que permiten a lenguajes habilitados con LINQ filtrar, enumerar y crear proyecciones de varios tipos de colecciones usando la misma sintaxis. Tales colecciones pueden incluir arreglos, clases enumerables, XML, conjuntos de datos desde bases de datos relacionales y or铆genes de datos de terceros. El proyecto LINQ usa caracter铆sticas de la versi贸n 2.0 del .NET Framework, nuevos ensamblados relacionados con LINQ y extensiones para los lenguajes C# y Visual Basic .NET. Microsoft ha distribuido una versi贸n previa del LINQ, consistente de estas bibliotecas y compiladores para C# 3.0 y Visual Basic 9. Otros lenguajes, como F# y Nemerle, han anunciado brindar soporte preliminar.

LINQ to SQL es una implementaci贸n de O/RM(object relational mapping, mapeador de objetos relacionales) que viene con la versi贸n 鈥淥rcas鈥 del .NET Framework (o sea, la 3.5) y nos permite modelar bases de datos relacionales con clases de .NET. Podemos consultar bases de datos con LINQ, as铆 como actualizar/a帽adir/borrar datos de ellas. Podemos manipular los datos de tablas como si fuesen objetos (clases).

Los desarrolladores podemos usar LINQ con cualquier fuente de datos. Es posible ejecutar consultas eficientemente en los lenguajes de programaci贸n que eligamos (especialmente C# :P ), opcionalmente transformar/incrustar los resultados de las consultas en el formato que quieran, y entonces manipular f谩cilmente los resultados. Los lenguajes habilitados para LINQ pueden aportar seguridad de tipos y chequeo en tiempo de compilaci贸n el las expresiones de consulta, y desarrollar herramientas que aporten intelisense, debugging, y un gran soporte para refactoring cuando escriban c贸digo de LINQ.

Visual Studio 2008 viene con un dise帽ador de LINQ to SQL que nos aporta una forma f谩cil de modelar y visualizar una base de datos como un modelo de objeto de LINQ to SQL (me recuerda mucho al SQL Server Express Management Studio cuando haces diagramas a las BD).
Usando este dise帽ador LINQ to SQL, se puede crear f谩cilmente una representaci贸n de la base de datos 鈥淣orthwind鈥, con solo arrastrar las tablas, procedimientos almacenados y vistas desde el Explorador de servidores, tal y como lo vemos ac谩:

Dise帽ador LINQ to SQL

El dise帽o de arriba define cuatro clases: Product, Category, Order y OrderDetail. Las propiedades de cada clase mapean las columnas de cada tabla en la base de datos. Cada instancia de esa clase representa una fila en las tablas, en otras palabras, las tablas sse convierten en “clases” que podemos instanciar despu茅s, ya sea para consultar, modificar, insertar y/o eliminar.

Las flechas entre las cuatro clases de arriba representan las asociaciones/relaciones entre las diferentes entidades. Son t铆picamente modeladas como relaciones primary-key/foreign-key en la base de datos. La direcci贸n de las flechas en el dise帽ador indican la cardinalidad (uno a uno o uno a muchos). Autom谩ticamente se a帽aden propiedades fuertemente tipadas a las entidades bas谩ndose en esto. Por ejemplo, la clase Category de arriba tiene una relaci贸n de uno-a-muchos con la clase Product. Esto implica que tendr谩 una propiedad 鈥淐ategories鈥 que es una colecci贸n de objetos Product con esa categor铆a. La clase Product entonces tiene una propiedad 鈥淐ategory鈥 que apunta a una instancia de la clase Category representando la categor铆a a la que pertenece el producto.

El panel de la derecha del dise帽ador LINQ to SQL contiene una lista de procedimientos almacenados que interact煤an con el modelo de base de datos. En el ejemplo de arriba se ve un Procedimiento almacenado llamado 鈥淕etProductsByCategory鈥. Como entrada recibe un categoryID, y devuelve una secuencia de Product como resultado. Esto lo voy a tomar para un futuro post, por el momento voy a mostrar una consulta simple, como el cl谩sico “hola mundo” en LINQ.

A este modelo llamaremos DataContext. Una vez que tenemos el modelo (archivo .dbml) ya podemos instanciar tablas como si fueran clases, o incluso el mismo DataContext.

Por ejemplo, si queremos hacer un query que nos devuelva el registros de la tabla Category (por cuestiones de facilidad, ya que posee pocos campos o columnas) donde el campo CategoryName sea igual a ‘ejemplo’, estaremos pensando en el cl谩sico:

SELECT CategoryID, CategoryName, Description, Picture FROM Category where CategoryName = 'ejemplo'

lo cual hay muchos m茅todos para mostrarlos, por ejemplo con el m茅todo conectado, tendr铆amos que crear una conexi贸n, definir un Command, definir un DataReader, abrir la conexi贸n, ejecutar el DataReader, imprimir los datos y cerrar la conexi贸n.

La ventaja con LINQ, es que no tenemos que especificar nada de esto, 煤nicamente con un query (que por cierto su sintaxis es totalmente “al rev茅s” y por lo general se utiliza un nuevo tipo de dato llamado ‘var’) y se ejecuta hasta que se usa, lo cual mejora grandemente el rendimiento de la aplicaci贸n y reduce el tiempo de conexi贸n al servidor.
Por ejemplo, para el mismo query de arriba (obvio, en C#):


NorthwindDataContext dc = new NorthwindDataContext();
//creamos un DataContext llamado dc.

var query = from c in dc.Category
where c.CategoryName == 'ejemplo'
select c;

//este es el query, se ejecutar谩 hasta que lo ocupemos en alg煤n lugar del c贸digo.

foreach(string algo in query)
{
Response.Write(algo);
}
//en el ciclo foreach se ejecuta la consulta, se devuelven los datos y se imprimen.

y eso es todo, despu茅s voy a poner otras formas de usar esta tecnolog铆a nueva, siempre con bases de datos.

lo cual devuelve un IEnumerable del tipo de objetos Category

Accesar a celdas de un GridView o DataList para ejecutar acciones sobre ellas

21 de Abril, 2008

Al igual que muchos desarrolladores, pas茅 2 d铆as con un problema que ya me ten铆a con canas verdes, necesitaba ejecutar una acci贸n (un m茅todo) y necesitaba enviarle 2 par谩metros. Gr谩ficamente es este sencillo c贸digo:

public static void votar(int param1, int param2) //ac谩 le mando los 2 par谩metros, uno de ellos est谩 en el gridview.
{
//acciones
}


Hasta el momento todo bien, pero necesitaba ejecutar el m茅todo desde un GridView (o en su defecto, un DataList), cre茅 un ItemTemplate para poner un LinkButton para mandar a llamar a la funci贸n antes mostrada, pero cu谩l fue mi sorpresa? no puedo crear m茅todos directamente desde un ItemTemplate.

Despu茅s de navegar por horas y horas, encontr茅 que si se pueden accesar a los DataKeys de los controles de Acceso a Datos de ASP.NET, pero estos datakeys manejan 煤nicamente las llave(s) primaria(s) de la consulta efectuada por el DataSource, y yo necesitaba mandarle un campo que NO era llave primaria, y la pregunta del mill贸n de colones: 驴C贸mo accedo a los dem谩s miembros (o celdas) de un control de este tipo y poder manipularlos?

Pues existe un evento en los controles GridView llamado RowCommand (ItemCommand para DataList) que permite crear acciones espec铆ficas personalizadas para los controles de datos, as铆 que gracias a mi socio y amigo Relmont, pude solventar la problem谩tica.
驴C贸mo? una vez creado el ItemTemplate con el LinkButton que efectuar铆a la acci贸n, le especifico el CommandName (al LinkButton) y en el evento RowCommand del GridView puedo especificar lo que va a hacer:

if (e.CommandName == “accion”)
{
//Acciones ac谩
}


El meollo del asunto es c贸mo acceder铆a a la celda que me interesaba mandar como par谩metro a la funci贸n, as铆 que me toc贸 hacer una serie de cast para lograr acceder a la celda por medio del linkbutton, lo cual se hace as铆 (para un GridView):

GridViewRow r = (GridViewRow)((DataControlFieldCell)((LinkButton)e.CommandSource).Parent).Parent;
//ac谩 convierto el CommandSource al tipo del control que efectuar谩 o lanzar谩 la acci贸n,
//despu茅s al tipo de control del gridview y despues lo convierto a un GridViewRow
//lo s茅, es un rollo algo enredado XD

int votado = int.Parse(r.Cells[2].Text); //necesito obtener la 3潞 celda del Gridview (incluyendo las que no se ven y las de acciones) y la asigno a una variable int
votar(votado, id); //ac谩 ejecuto mi funci贸n y ya le puedo enviar el par谩metro que necesitaba :P

Y ya con esto pude ejecutar la bendita funci贸n!!!
Despu茅s lo publico para un DataList :P

Mi primer charla en las C茅lulas GNET

9 de Abril, 2008

Hoy fue mi primer charla en la c茅lula de desarrollo web, que se est谩n impartiendo en la U. Francisco Gavidia. No llegaron muchos asistentes, ya que no se ha hecho pr谩cticamente nada de publicidad, pero pasando por alto este inconveniente, la charla se dio en su totalidad.

Espero que me hayan entendido, o por lo menos captado la idea XD

Ac谩 les dejo el link para que descarguen la presentaci贸n y el demo que hicimos.
http://www.archisoftware.net/gnet/MasterPages.zip

Bienvenidos a mi nuevo blog

5 de Noviembre, 2007

Bienvenidos a mi primer blog (al fin).

Ac谩 podr谩n encontrar informaci贸n y tips acerca de programaci贸n que he ido recopilando con la experiencia, problemas resueltos que no he podido encontrar en ning煤n libro :’(

Tratar茅 de ir posteando lo m谩s que pueda, asi q sin mas, los dejo por el momento.