Using LINQ to SQL (1era. Parte)

En esta ocasión les voy a hablar sobre LINQ, esta nueva tecnología integrada en el .NET Framework 3.5 de Microsoft. Pues bien esta monería nos permite utilizar cualquier fuente de datos. Por cierto LINQ significa .NET Language Integrated Query. Aunque es importante mencionarles que esta tecnología ya existía desde DBase, sólo que hasta hoy se integra con el mismo lenguaje de programación que utilizamos día a día.

Bueno pues como les decía LINQ es una herramienta que nos permite crear consultas dentro de VB .NET 9.0 o C# .NET 3.0 y es una implementación de O/RM (Object Relational Mapping), además podemos añadir, eliminar o actualizar múltiples registros.

Bueno ahora pasemos a la práctica que es lo mejor de todo, lo que vamos a hacer es crear una base de datos para poder realizar las tareas que les mencioné con LINQ.

Los prerequisitos que necesitamos para hacer este ejemplo son:

  • Base de Datos llamada LinqToSQL con una tabla llamada "Clientes"

LinqToSQLDB

  • Aplicación Web llamada LinqToSQLDemo (Con el .NET Framework 3.5 habilitado)

LinqToSQLDemo

  • Visual Studio 2008 RTM, (Beta 2) u Orcas.

Ahora vamos a utilizar la página Default.aspx con un control GridView, es aspecto debería algo así como el que vemos a continuación:

LinqPage

Ahora vamos a agregar un nuevo elemento a nuestro sitio Web: "Linq To SQL Clases" con el nombre LinqToSQL:

LinqToSQLdbml

Una vez que agregamos este nuevo elemento nos crear un diseñador en el cual podemos arrastrar tablas y procedimientos almacenados, esto nos generará una clase de manera automática para poder trabajar con la fuente de datos. Lo que vamos a hacer es arrastrar la tabla de "Clientes" que hemos creado:

LinqToSQLdbmlC

 

Este diseñado también nos mostrará las relaciones (Primary Key, Foreign Key) que pudieran existir en la base de datos. Bueno lo primero que vamos a hacer es hacer una consulta a la fuente de datos para mostrarla en el GridView, para esto vamos a introducir el siguiente código en el Page_Load de nuestra página:

VB:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Page.IsPostBack Then
           MostrarGrid()
        End If
End Sub

Private Sub MostrarGrid()
        Dim db As New LinqToSQLDataContext()
        Dim query = From c In db.Clientes _
                    Select c

        GridView1.DataSource = query
        GridView1.DataBind()
    End Sub

C#:

protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            MostrarGrid();
        }
    }

protected void MostrarGrid()
    {
        LinqToSQLDataContext db = new LinqToSQLDataContext();
        var query = from c in db.Clientes
                    select c;

        GridView1.DataSource = query;
        GridView1.DataBind();
    }

Ahora ejecutemos la página web y veamos el resultado:

LinqtoSQLQuery

Ahora vamos a ver cual es el código para insertar registros, para esto vamos a agregar 5 cajas de texto, 5 etiquetas y 1 botón, nuestra página debería de quedar algo similar a esto:

LinqtoSQLInsert

VB:

Protected Sub btnGuardar_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnGuardar.Click 
       Dim db As LinqToSQLDataContext = New LinqToSQLDataContext() 
       Dim clientes = New Cliente()
       clientes.Nombre = txtNombre.Text
       clientes.ApellidoPaterno = txtApellidoPaterno.Text
       clientes.ApellidoMaterno = txtApellidoMaterno.Text
       clientes.Ocupacion = txtOcupacion.Text
       clientes.FechaDeNacimiento = CDate(txtFechaNacimiento.Text) 

       db.Clientes.InsertOnSubmit(clientes)
       db.SubmitChanges() 
  
    txtNombre.Text = ""
       txtApellidoPaterno.Text = ""
       txtApellidoMaterno.Text = ""
       txtOcupacion.Text = ""
       txtFechaNacimiento.Text = ""
       MostrarGrid() 
End Sub

C#:

protected void btnGuardar_Click(object sender, EventArgs e)
{
    LinqToSQLDataContext db = new LinqToSQLDataContext();
    Cliente clientes = new Cliente();
    clientes.Nombre = txtNombre.Text;
    clientes.ApellidoPaterno = txtApellidoPaterno.Text;
    clientes.ApellidoMaterno = txtApellidoMaterno.Text;
    clientes.Ocupacion = txtOcupacion.Text;
    clientes.FechaDeNacimiento = Convert.ToDateTime(txtFechaNacimiento.Text);

    db.Clientes.InsertOnSubmit(clientes);
    db.SubmitChanges(); 
    txtNombre.Text = "";
    txtApellidoPaterno.Text = "";
    txtApellidoMaterno.Text = "";
    txtOcupacion.Text = "";
    txtFechaNacimiento.Text = "";

    MostrarGrid();

}

Listo, por ahora ya tenemos la funcionalidad de insertar registros y mostrarlos el GridView con los nuevos registros.

LinqtoSQLInserted

Ahora vamos a ver la funcionalidad para eliminar registros, para esto vamos a agregar un nuevo campo llamado Cliente Id y un nuevo botón a nuestro formulario Web llamado y escribiremos el siguiente código en el evento click del botón:

VB:

Protected Sub btnEliminar_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnEliminar.Click
        Dim db As LinqToSQLDataContext = New LinqToSQLDataContext

        Dim eliminaCliente = (From c In db.Clientes _
                              Where c.ClienteId = CInt(txtClienteId.Text)).ToList()(0)

        db.Clientes.DeleteOnSubmit(eliminaCliente)
        db.SubmitChanges()
        txtClienteId.Text = ""
        MostrarGrid()
    End Sub

C#:

protected void btnEliminar_Click(object sender, EventArgs e)
    {
        LinqToSQLDataContext db = new LinqToSQLDataContext();
        var eliminaCliente = (from c in db.Clientes
                             where c.ClienteId == Convert.ToInt32(txtClienteId.Text)).ToList()[0];
        db.Clientes.DeleteOnSubmit(eliminaCliente);
        db.SubmitChanges();
        txtClienteId.Text = "";
        MostrarGrid();
    }


Vamos a ejecutar nuestra página y tendremos un resultado como el siguiente:

LinqtoSQLDelete

Por último vamos a crear el código para actualizar un registro, vamos a crear un tercer botón para actualizar un registro e introduciremos el siguiente código:

VB:

Protected Sub btnActualizar_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnActualizar.Click
        Dim db As LinqToSQLDataContext = New LinqToSQLDataContext()
        Dim actualizaCliente = (From c In db.Clientes _
                                Where c.ClienteId = CInt(txtClienteId.Text) _
                                Select c).Single

        actualizaCliente.Nombre = txtNombre.Text
        actualizaCliente.ApellidoPaterno = txtApellidoPaterno.Text
        actualizaCliente.ApellidoMaterno = txtApellidoMaterno.Text

        db.SubmitChanges()
        MostrarGrid()
    End Sub

C#:

protected void btnActualizar_Click(object sender, EventArgs e)
{
    LinqToSQLDataContext db = new LinqToSQLDataContext();
    var actualizaCliente = (from c in db.Clientes
                            where c.ClienteId == Convert.ToInt32(txtClienteId.Text)
                            select c).Single();

    actualizaCliente.Nombre = txtNombre.Text;
    actualizaCliente.ApellidoPaterno = txtApellidoPaterno.Text;
    actualizaCliente.ApellidoMaterno = txtApellidoMaterno.Text;

    db.SubmitChanges();
    MostrarGrid();
}


Bueno ahora vamos a probar nuestra página para ver su funcionamiento, y obtendremos un resultado como el que les muestro a continuación:

LinqToSQLUpdate

Resumen:

Linq To SQL nos permite modelar la capa de datos de nuestras aplicaciones de una forma muy sencilla. Lo único que necesitamos es contar un modelo de datos estructurado para poder realizar las tareas a la base de datos: insertar, actualizar, borrar y consultar.

Espero que este artículo sea de ayuda y en la próxima entrega veremos el trabajo con más de una tabla, es decir que estén relacionadas entre sí para hacer consultas y actualizaciones en una o más tablas, dependiente de las relaciones que pudieran existir.

S@ludos y un abrazo!
Víctor Alameda
Microsoft Certified Solution Developer .NET

Published Friday, March 21, 2008 2:52 PM por VAlameda
Archivado en: ,
Ofrecido por Community Server (Non-Commercial Edition)