¿Para que sirve el método dispose?

Viernes, 27 de Febrero de 2009

Por ejemplo, si haces un cmd.dispose() o un conn.dispose() lo que haces es solicitar que se liberen los recursos que fueron utilizados por el objeto command (cmd) o el objeto connection (conn).

admin General ,

Obtener datos de cualquier celda de un gridview

Jueves, 26 de Febrero de 2009

Bien, esta es una entrada breve para describir algo muy sencillo, muy útil pero a veces un poco rebuscado…¿como puedo obtener los datos de cualquier celda de una grilla? Pues bien, tan solo es necesario utilizar la siguiente línea de código (obviamente, una vez cargada nuestra grilla):

gvAutores.Rows[2].Cells[2].Text;

Donde:

  1. gvAutores es la grilla en la que queremos realizar la operación.
  2. Rows[2] –> en esta parte del código especificamos la fila de la grilla
  3. Cells[2] –> en esta parte del código especificamos que vamos a trabajar con la celda que tiene el indice número 2
  4. Text –> aquí obtenemos el texto de la celda.

Entonces, como verán, es bien sencillo obtener el texto / dato de cualquier celda de una grilla especificando el índice de la fila y de la celda que queremos trabajar.

Nota: Este código está escrito en C# y los indices para las filas y celdas siempre comienzan en 0 de tal forma que la primera fila siempre lleva el índice 0 y la primera celda siempre lleva el índice 0 también.

admin .Net , ,

Como instalar el Asp.Net sobre IIS 6

Viernes, 13 de Febrero de 2009

Bien, ocurre que acabas de instalar el Visual Studio 2005 en cualquiera de sus versiones y te das con la sorpresa de que al hacer tu primera aplicación Asp.Net esta no funciona. Le das mil vueltas al asunto y no logras descubrir que es lo que sucede…inicialmente pensaste que era porque en el web.config de tu aplicación la opción “debug” estaba en false. La cambiaste a “true”, volviste a ejecutar y tampoco. Este es un caso típico que puede deberse, entre otras cosas, a que no está instalado el asp.net en tu servidor IIS. Entonces, lo único que deberás hacer para solucionar este problema es lo siguiente:

  1. Inicia una consola DOS en tu máquina (Inicio + Ejecutar + CMD)
  2. Ve a la siguiente ruta: C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727
  3. Ejecuta el siguiente comando: aspnet_regiis.exe -i

Este comando instalará el Asp.Net en tu IIS y listo, a partir de este momento podrás ejecutar tus aplicaciones asp.net sin problemas.

admin General , , ,

Cómo y para qué utilizar clases tipo TO

Miércoles, 11 de Febrero de 2009

Es posible que se formulado, en algún momento, alguna de estas preguntas:

  • ¿Habrá alguna forma más ordenada de enviarle tantos parámetros a este método?
  • ¿Y ahora, como devuelvo de forma ligera todos estos datos?

Si fué así, pues aquí les planteo la solución que utilizo siempre para este tipo de dilemas. Es muy sencillo, utilizo una clase para transporte de datos. ¿Cómo es esto?..pues bien, veamos de qué se trata:

Escenario

Para el siguiente ejemplo, tomaremos como escenario el típico caso de los datos de un usuario. Es un poco engorroso, desordenado y hasta dificil de mantener (hablo del código) el estar pasando todos los datos correspondientes a un usuario cuando de actualizar o insertar los datos se trata. Para estos casos, es mejor crear una clase que contenga todos estos posibles datos a manera de propiedades, de tal manera que manejaremos la información de cada usuario a través de dicha clase. Para este ejemplo, solo voy a considerar 5 datos:

  1. Código del usuario
  2. Nombre
  3. Apellido
  4. Usuario
  5. Contraseña

Bien, a continuación les muestro como se tendría que ver nuestra clase UsuarioTO (es importante que diferenciemos nuestras clases de lógica, acceso a datos, transporte, etc. a través de sufijos en los nombres de dichas clases. Esto ayudará a entender facilmente el código cuando sea necesario hacerle mantenimiento:

public class UsuarioTO

{

public UsuarioTO()

{

}

private int _codigo = 0;

private string _nombre = “”;

private string _apellido = “”;

private string _usuario = “”;

private string _contrasena = “”;

public int CODIGO

{

get { return _codigo; }

set { _codigo = value;}

}

public string NOMBRE

{

get {return _nombre;}

set{_nombre = value;}

}

public string APELLIDO

{

get{return _apellido;}

set{_apellido = value;}

}

public string USUARIO

{

get{return _usuario;}

set{_usuario = value;}

}

public string CONTRASENA

{

get{return _contrasena;}

set{_contrasena = value;}

}

}

Bien, lo que hemos hecho es crear la clase UsuarioTO en la cual declaramos nuestras variables de manera privada para que solo puedan ser utilizadas dentro de la clase. Adicionalmente, agregamos los populares “getters & setters” que son los métodos que nos van a permitir configurar valores para nuestras “propiedades” u obtener su valor actual. Tal vez, si estás comenzando a utilizar este tipo de clases, pueda parecer un poco confuso. En todo caso, veamos el siguiente ejemplo para demostrar su uso práctico en el tipico caso de un inicio de sesión:

UsuarioTO usuarioTO = new UsuarioTO(); //Declaramos una nueva instancia de nuestra clase UsuarioTO

SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["RESOMASA"].ConnectionString); //Configuramos el objeto SqlConnection para poder conectarnos a la base de datos

SqlCommand cmd = new SqlCommand(“RES_SP_VALIDAUSUARIO”, conn); //Configuramos el objeto SqlCommand

cmd.CommandType = CommandType.StoredProcedure;

cmd.Parameters.AddWithValue(“@VC_USUARIO”, usuario); //Agregamos los paràmetros para la ejecuciòn del procedimiento almacenado

cmd.Parameters.AddWithValue(“@VC_CONTRASENA”, contrasena);

conn.Open(); //Abrimos la conexiòn a la base de datos

SqlDataReader reader = cmd.ExecuteReader(); //Declaramos un objeto SqlDataReader para leer los datos traidos de la consulta

if (reader.Read()) //Validamos si es que existen datos

{

//A continuaciòn configuramos los datos obtenidos de la consulta en las propiedades de nuestra clase UsuarioTO

usuarioTO.CODIGO = int.Parse(reader["IN_USUARIO"].ToString());

usuarioTO.NOMBRE = reader["VC_NOMBRE"].ToString();

usuarioTO.APELLIDO = reader["VC_APELLIDO"].ToString();

}

conn.Close(); //Cerramos la conexiòn

cmd.Dispose(); //Liberamos los recursos

//A partir de este momento, tendremos absoluta libertad para manejar los datos obtenidos a travès de nuestra clase UsuarioTO.

if (usuarioTO.CODIGO > 0)

{

//Incluso, podemos almacenar la clase con los datos obtenidos en una sesiòn para utilizarlos luego.

Session["USUARIO"] = usuarioTO;

Response.Redirect(“res_home.aspx”);

}

else

{

lblError.Text = “El usuario o contraseña son incorrectos”;

}

Entonces, de esta manera podemos utilizar este esquema para hacer nuestra codificación más fácil de manejar, sobretodo para casos más complejos como la información de un cliente o la información de un producto.

admin .Net , , ,

Nokia N97

Lunes, 9 de Febrero de 2009

He aquí un video en el que la gente de phonescoop explica las características del N97 de Nokia. Yo quiero uno…

admin General , ,

Google Latitude

Lunes, 9 de Febrero de 2009

Una de las nuevas aplicaciones que nos presenta google maps es el poderoso “latitude”. Una singular aplicación sobre google maps que permite conocer la ubicación geográfica de tus amigos y su estado actual (personalizado por cada usuario). Esta aplicación ha sido hecha pensando en la el acceso a internet desde teléfonos celulares pero también puede utilizarse desde tu portatil o pc de escritorio. Si usted es un empresario, ¿ha pensado en el control que le puede ofrecer esta herramienta sobre su equipo de ventas o sobre su flota de distribución?.
A continuación un video sobre como funciona esta nueva tecnología de google:

admin Actualidad , , , ,

LINQ – Comentarios del mismísimo Anders Hejlsberg

Lunes, 9 de Febrero de 2009

Aquí un video sobre una entrevista que le hiciera Charlie Clavert al mísmisimo Anders Hejlsberg, arquitecto en jefe de C# en donde comenta sobre el poderoso LINQ y como este nos facilitará la manera de consultar bases de datos y XML.

admin .Net , ,

Web Hosting TOP 10

Domingo, 8 de Febrero de 2009

Bien, estuve navegando un poco tratando de encontrar algún ranking decente sobre servicios de hosting y encontré este que tal vez les pueda servir para comparar productos y tomar una decisión acertada (http://www.webhosting-top10.com/index2/host12/)

120

admin Actualidad , ,

Mostrar datos de una base de datos en una lista desplegable

Domingo, 8 de Febrero de 2009

En esta entrada voy a mostrarles como realizar una conexión a una base de datos para mostrar dichos datos en una lista desplegable.  Antes de empezar, algunos datos que debemos tomar en cuenta:

Versión del framework .Net: 2.0
Lenguaje de programación: C#
Versión de la base de datos: MSSQL 2000
Base de datos: Pubs (base de datos que viene con la versión del motor especificado)

Listo, manos a la obra:

Escenario

Para los ejemplos que voy a realizar, vamos a listar la tabla de empleos de la base de datos Pubs (tabla jobs).

Solución

  1. Lo primero que vamos a hacer, es crear una aplicación web, seleccionando el lenguaje de nuestra preferencia. En este caso y como ya lo había mencionado, vamos a utilizar el lenguaje C#.
  2. Luego de crear nuestra aplicación Web, agregaremos un objeto dropdownlist:115
  3. Una vez que hayamos agregado nuestro objeto “DropDownList” a nuestra página, le asignaremos un nombre que sea fácil de interpretar dentro de nuestro código, en este caso, ddlEmpleos:116
  4. Una vez que ya hemos configurado el nombre de nuestro control, crearemos el procedimiento almacenado que nos permitirá listar los elementos de la tabla JOBS de la base de datos PUBS:117Les recuerdo que siempre que se trabaje con una base de datos MSSQL en cualquiera de sus versiones, es mucho más eficiente utilizar procedimientos almacenados que consultas directas a la base de datos, es una buena práctica y debemos tomarla en cuenta si queremos construir aplicaciones que brinden un buen desempeño.
  5. Bien, ya hemos configurado el control y creado el procedimiento almacenado para llenarlo. Ahora estamos listos para el código que nos permitirá mostrar estos datos en nuestro control:118Ahora explicaré el código linea por línea:

    if (!Page.IsPostBack)
    {
    cargaEmpleos();
    }

    Primero controlamos que el método solo se ejecute la primera vez que la página se carga y llamamos al método “cargaEmpleos()”. Dentro de dicho método encontraremos lo siguiente:

    DataTable dt = new DataTable();

    En esta línea lo que haremos será crear una nueva instancia del objeto “DataTable” la cual nos servirá para guardar los datos que traigamos de la base de datos a través de la consulta hecha en el punto 4.

    using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["PUBS"].ConnectionString))

    Luego, utilizaremos la sentencia “using” para hacer que el objeto “SqlConnection” abra la conexión y la cierre cuando ya no sea necesario utilizarlo.

    SqlCommand cmd = new SqlCommand(”proc_jobslist”, conn);

    Declaramos un objeto “SqlCommand” el cual nos permitirá ejecutar el procedimiento almacenado creado en el punto 4 con la conexión definida en el objeto “SqlConnection”. Tendremos que especificar en el objeto “SqlCommand” que el comando que ejecutaremos será del tipo “StoredProcedure”.

    Finalmente, declaramos un objeto SqlAdapter para poder llenar nuestro contenedor, en este caso, un objeto “DataTable”:

    SqlDataAdapter adaptador = new SqlDataAdapter(cmd);

    Y le pedimos al objeto “SqlAdapter” que llene el contenedor:

    adaptador.Fill(dt);

  6. Bien, una vez que tenemos el objeto “DataTable” lleno con los datos de la base de datos, tenemos que indicarle al objeto “DropDownList” que se llenará con los datos de dicho contenedor. Adicionalmente tendremos que especificar que campos de la consulta corresponderan a las propiedades de valor y visualización de la siguiente manera:Primero, le decimos al objeto “DropDownList” que su fuente de datos será el objeto “DataTable”:

    ddlEmpleos.DataSource = dt;

    Luego, especificamos el campo que servirá para mostrarse en el control:

    ddlEmpleos.DataTextField = “job_desc”;

    Adicionalmente, especficamos el campo que servirá de valor al control, es decir, el valor que tomará cada selección.

    ddlEmpleos.DataValueField = “job_id”;

    Y finalmente le decimos al control que se llene con los datos configurados:

    ddlEmpleos.DataBind();

  7. Si seguimos los pasos tal cual lo detallo, debemos tener un resultado similar al siguiente:119

admin .Net

Mostrar datos de una base de datos en una grilla

Martes, 3 de Febrero de 2009

En esta entrada voy a mostrarles como realizar una conexión a una base de datos para mostrar dichos datos en una grilla. Antes de empezar, algunos datos que debemos tomar en cuenta:

Versión del framework .Net: 2.0
Lenguaje de programación: C#
Versión de la base de datos: MSSQL 2000
Base de datos: Pubs (base de datos que viene con la versión del motor especificado)

Listo, manos a la obra:

Escenario

Para los ejemplos que voy a realizar, vamos a listar la tabla de autores de la base de datos Pubs (tabla authors).

Solución

  1. Lo primero que vamos a hacer, es crear una aplicación web, seleccionando el lenguaje de nuestra preferencia. En este caso y como ya lo había mencionado, vamos a utilizar el lenguaje C#.
  2. Luego de haber creado la aplicación, es necesario que agreguemos una grilla (objeto gridview) a nuestra página.1
  3. Luego de agregar la grilla, la nombraremos con un nombre que sea fácil de reconocer, como por ejemplo, gvAutores:
    propi
  4. Una vez listo nuestro objeto, procederemos a configurar las columnas que se mostrarán en la grilla. Para esto, al poner el cursor sobre el mouse notaremos que aparecerá el acceso directo a la sección de tareas del gridview. Le hacemos clic a dicho acceso directo (cudrado blanco con una flecha dentro) y seleccionamos la opción “Edit Column”:12
  5. En esta pantalla, lo que haremos será indicarle al objeto gridview cuales son las columnas que queremos que se muestren, indicando el texto de la cabecera y el nombre del campo de la consulta correspondiente a cada columna. Para hacer esto, basta con seleccionar el tipo de columna “BoudField” y hacer clic en el botón “Add”. Notaremos que dicho campo es agregado a la sección “Selected fields” tal y como se muestra en la siguiente imagen:13
  6. Luego, seleccionando la columna que deseamos configurar, en la sección de la derecha “BoundField properties” iremos a la sección “Appearance” y escribiremos el texto que ira como cabecera de la columna selccionada en el campo “HeaderText”:14
  7. A continuación tendremos que indicarle al objeto gridview que campo de la consulta a la base de datos corresponde a la columna que estamos configurando. Para hacer esta operación, iremos a la sección “Data” y escribiremos el nombre del campo de la consulta a la base de datos que corresponderá a la columna que estamos configurando:15Una vez que hayamos terminado de configurar los campos de nuestro objeto gridview, no debemos olvidar desmarcar el check “Auto-generate fields”. Esta opción sirve en el caso que queramos que la grilla se autoconfigure de acuerdo a la consulta que hacemos a la base de datos, es decir, que las columnas tomen el orden de todos los campos que traemos en la consulta y tomen los nombres de dichos campos como nombres de las cabeceras respectivamente:17
  8. Luego de realizada esta operación, la repetiremos para todos los campos de la consulta hacia la base de datos, la cual procedo a mostrar:16 Nota

    : Es importante que todas las operaciones que hagamos con la base de datos (inserciones, eliminaciones, actualizaciones y listados) las hagamos siempre a través de procedimientos almacenados. Esto debido a que es más eficiente que realizar la consulta en forma directa.

  9. En el código de la aplicación debemos añadir el namespace que hace referencia a las clases de datos para SQL de microsoft: “System.Data.SqlClient”. Luego en el evento “Page_Load” tendremos que añadir el siguiente código:18Nota: En el archivo web.config, debe existir la siguiente sección:114

    En dicha sección, podremos configurar todas las cadenas de conexión que necesitemos en nuestra aplicación. En nuestro caso, estamos especificando que el nombre de nuestra cadena de conexión será “PUBS”. En la configuración de la cadena, consideraremos los siguientes valores:

    Server

    Aquí se especifica el nombre del servidor donde reside nuestra base de datos, por ejemplo, SERVPC001.

    Initial Catalog

    Aquí se especifica el nombre de la base de datos a la que nos vamos a conectar (PUBS).

    User Id

    Este es el usuario con el cual nos vamos a conectar a la base de datos.

    PWD

    Aquí se especifica la clave del usuario con el que nos vamos a conectar.

  10. La condicional agregada “if(!Page.IsPostBack)” nos asegura que el metodo para la carga de la grilla se realizará solo una vez, para ahorrar viajes inncesarios (nueva llamada a la base de datos) al servidor cada vez que la página se recargue. (En este caso, estoy asumiendo que no es necesario que se refresque la grilla con cada recarga de la página).
  11. Ahora, analicemos el método cargaGrilla(): Lo primero que estamos haciendo, es declarar un objeto DataTable para que este pueda contener los datos que traeremos de la base de datos. Este objeto es mucho más liviano que el objeto DataSet y por ende más eficiente para realizar la tarea encomendada. A continuación, utilizamos la sentencia “using” con la creación de un objeto SqlConnection. Esto nos sirve para que, dentro de las llaves del “using”, funcione el objeto SqlConnection y luego sea cerrada dicha conexión. Es muy importante siempre cerrar las conexiones que abrimos a la base de datos, esto nos dará un mejor desempeño en nuestras aplicaciones y una buena forma de asegurarnos es utilizando la sentencia mencioanda. Bien, veamos que ocurre línea por línea dentro de las llaves del using:SqlCommand cmd = new SqlCommand(”proc_authorslist”, conn); Esta sentencia nos sirve para crear un objeto del tipo SqlCommand, el cual nos servirá para ejecutar comandos SQL en nuestra base de datos. Como parámetros, le estamos pasando el nombre del procedimiento almacenado que hemos creado “proc_authorlist” y el objeto conexión (SqlConnection) con el que realizará la operación.cmd.CommandType = CommandType.StoredProcedure;

    Luego, debemos especificar (en el objeto SqlCommand) que el tipo de comando que utilizaremos será un procedimiento almacenado. En caso se desee ejecutar una sentencia SQL directamente, se podrá utilizar el valor “Text” en lugar de “StoredProcedure” (no recomendado si se trabaja con una base de datos MSSQL).

    SqlDataAdapter adaptador = new SqlDataAdapter(cmd);

    Una vez configurado el objeto SqlCommand, debemos crear un objeto SqlDataAdapter el cual nos servirá para llenar el contenedor de nuestra elección (en nuestro caso un DataTable). Como parámetro, le estamos enviando el objeto SqlCommand que acabamos de configurar.

    adaptador.Fill(dt);

    Finalmente, lo que haremos será pedirle al objeto SqlDataAdapter que llene nuestro contenedor con el método “Fill”.

  12. Una vez que el contenedor se encuentra lleno, ya podemos usarlo para mostrar dichos datos en nuestra grilla. Lo único que hay que hacer es decirle a la grilla que objeto será su fuente de datos y pedirle que lo cargue:gvAutores.DataSource = dt;Aquí especificamos que la fuente de datos de la grilla que hemos creado será el objeto DataTable que hemos llenado anteriormente.gvAutores.DataBind();

    Aquí le pedimos al objeto grilla que muestre los datos de acuerdo a las configuraciones que hemos realizado.

  13. Listo, hecho esto, deberíamos tener como resultado la siguiente pantalla:110

Bien, espero que con este sencillo ejemplo quede claro como mostrar los datos de una consulta a la base de datos en una grilla. Más adelante les mostraré como utilizar otros objetos como el DropDownList, etc.

admin .Net , , ,