sábado, 28 de junio de 2008

Conexión a una BD - Segunda Parte

En el post anterior de Diego se vio cómo hacer una conexión a una Base de Datos de SQL Server 2005, traer los datos de una tabla y mostrarlos en un GridView.
El código original es el siguiente:

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.Sql;
using System.Data.SqlClient;
using System.Collections.Generic;
using System.Collections;
using System.Data.OleDb;

public partial class _Default : System.Web.UI.Page
{
string strConexion = "Data Source=.\\SQLEXPRESS;AttachDbFilename=E:\\sql
\\MSSQL.1\\MSSQL\\Data\\Celula.mdf;Integrated Security=True;Connect
Timeout=30;User Instance=True"
;
protected void Page_Load(object sender, EventArgs e)
{
Listar();
}

//con este metodo relleno el gridview1
protected void Listar()
{
SqlConnection conexion = new SqlConnection(strConexion);
SqlDataAdapter adapter = new SqlDataAdapter("Select * from
Integrantes"
, conexion);
DataSet ds = new DataSet();
try
{
conexion.Open();
adapter.Fill(ds, "Integrantes");
this.GridView1.DataSource = ds.Tables["Integrantes"].DefaultView;
this.GridView1.DataBind();
conexion.Close();
}
catch (SqlException ex)
{
Response.Write("se ha producido una excepción: " + ex);
}
}
}

Para mejorar el código comenzamos por lo siguiente: reemplazar en la cadena de conexión la dirección física del archivo de base de datos por el nombre de la misma, mediante la propiedad Initial Catalog, dejando que el motor del SQL Server busque la ubicación física:

string strConexion = @"Data Source=.\SQLEXPRESS;Initial Catalog=Celula;
Integrated Security=True;Connect Timeout=30;User Instance=True"
;

Otra cosa, en este código se está referenciando muchos NameSpaces que no son necesarios. El comienzo del código debería quedar sólo con lo siguiente:

using System;
using System.Web;
using System.Web.UI;
using System.Data;
using System.Data.SqlClient;

Ahora, como se puede ver en este post de Jujuy ASP NET, es conveniente utilizar bloques using, por lo que se debería cambiar el código de la función Listar para que quede como el siguiente:

protected void Listar()
{
using (SqlConnection conexion = new SqlConnection(strConexion))
{
using (SqlDataAdapter adapter = new SqlDataAdapter("Select * from
Integrantes"
, conexion))
{
using (DataSet ds = new DataSet())
{
try
{
conexion.Open();
adapter.Fill(ds, "Integrantes");
this.GridView1.DataSource = ds.Tables["Integrantes"].DefaultView;
this.GridView1.DataBind();
//conexion.Close();
}
catch (SqlException ex)
{
Response.Write("se ha producido una excepción: " + ex);
}
}
}
}
}

Como se puede ver, también se ha comentado la línea en donde se cierra la conexión. Esto se debe a que al utilizar un bloque using no hace falta cerrar explícitamente la conexión.
Eso es todo! Espero que haya servido.

No hay comentarios: