¿Para que sirve el método dispose?
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).
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).
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:
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.
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:
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.
Es posible que se formulado, en algún momento, alguna de estas preguntas:
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:
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.
He aquí un video en el que la gente de phonescoop explica las características del N97 de Nokia. Yo quiero uno…
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:
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.
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/)

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


Les 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.
Ahora 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);
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();

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





Una 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:
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.
Nota: En el archivo web.config, debe existir la siguiente sección:
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.
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”.
Aquí le pedimos al objeto grilla que muestre los datos de acuerdo a las configuraciones que hemos realizado.

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.