martes, 23 de febrero de 2010

ADO.NET & LINQToSQL

Hola, En este post voy a explicar cómo crear una alicación maestro detalle (Clientes-Facturas) pero ahora usando LINQToSQL. ¿Pero qué es LINQ? LINQ es un lenguaje de consultas que permite unir datos con programación y nos hará más fácil trabajar con datos, colecciones y elementos ya que podremos hacer consultas como las de SQL usando VB.NET o C#. Tenemos varias extensiones: LINQToObjects, LINQToXML, LINQToDataset, LINQToSQL y LINQToEntities. Con la API LINQToSQL podemos hacer de una forma fácil y sencilla consultas de la misma forma que escribimos código.

Pero, lógicamente antes de la versión 3.5 del NET Framework, que es a partir de la cual se puede usar LINQ, también se podia trabajar con datos gracias a ADO.NET (Namespace System.Data). Para ello voy a recordar las 2 formas que existían y que existen para acceder a una base de datos y luego más tarde explicaré en un video como hacer lo mismo usando LINQToSql, ya que en programación hay más de una forma de hacer las cosas:

1. Acceso desconectado a la base de datos: se llama así porque sólo estamos conectados a la fuente de datos el tiempo preciso para realizar las operaciones. Para ello utilizamos un dataset, una copia en memoria de los datos, y un dataadapter, que se encargará de conectarse a la fuente de datos y rellenar las tablas del dataset. El dataadapter abrirá la conexión, rellenará los datos en el dataset o actualizará la fuente de datos y cerrará la conexión el solito. Gracias al dataadapter podemos filtrar los datos a nuestro antojo. En el siguiente ejemplo voy a seleccionar los registros de la base de datos Northwind cuyo país es España. Yo parto de una aplicación para Windows Forms en VB.NET con un formulario, en el que se ha añadido un control DataGridView llamado DataGridView1. Pues pegar este este fragmento de código en el evento Load:

'defino la cadena de conexión
Private conexion As String = "Data Source=(local); Integrated Security=true; Initial Catalog=Northwind;"

'declaro el dataadapter, poniendo el selectcommand y la cadena de conexión
Dim da As New SqlDataAdapter("Select * from Customers where country =@pais", conexion)
da.SelectCommand.Parameters.Add("@pais", SqlDbType.NVarChar).Value = "Spain"
'declaro el dataset
Dim ds As New DataSet

'relleno el dataset usando el método Fill del dataapter
da.Fill(ds, "Customers")
Me.DataGridView1.DataSource = ds.Tables("Customers")

2. Acceso conectado a la base de datos: en este caso abriremos la conexión y permanerá abierta hasta que nosotros la cerrermos. En algunas ocasiones se utiliza este tipo de acceso porque lo que queremos no es una copia en memoria de los datos sino queremos actualizar un conjunto de datos. Por ejemplo quiero actualizar el tipo general de IVA del 16 % al 18 % en la base de datos Facturas. Bueno, para que funcione este ejemplo necesitas tener lo mismo de antes, un formulario en VB.NET con un DataGridView llamado DataGridView1:

'defino la conexión
Dim conexion As New SqlConnection("Data Source=(local); Integrated Security=true; Initial Catalog=Northwind;")

'abro la conexión
conexion.Open()

'delaro el SqlComand
Dim comando As New SqlCommand("Select * from Customers where country=@pais", conexion)
comando.Parameters.Add("@pais", SqlDbType.NVarChar).Value = "Spain"
'el tipo es texto, también prodrñia ser un storedprocedure
comando.CommandType = CommandType.Text


'declaro el datareader
Dim reader As SqlDataReader = comando.ExecuteReader()


'declaro el datatable
Dim dt As New DataTable


'relleno el datatable
dt.Load(reader)
Me.DataGridView1.DataSource = dt

'que no se me olvide de cerrar la conexión ya que si no consume recursos
conexion.Close()

Ok, esto está muy bien, pero ¿cuál es la ventaja de usar LINQ frente a lo que hemos visto? Pues la ventaja... Para mi es complicado comprobar si la consulta es correcta antes de ejecutar la aplicación. En cambio usando LINQToSQL (acceso conectado) o LINQToDataset (acceso desconectado) puedo depurar la consulta, además de al escribirla tener la ayuda que me proporciona IntelliSense.

Pues bien en el ejemplo que pongo acontinuación, voy a hacer lo mismo que podría hacer de cualquiera de las 2 maneras anteriores pero ahora usando LINQToSQL. En este primer vídeo además de mostrar como crear la interfaz de usuario explicaré como eliminar y modificar Facturas. En un segundo vídeo explicaré cómo insertar facturas y cómo pasar datos entre formularios.


En este link se puede descargar el Snaphot1 con todo el código fuente del programa. Para abrirlo necesitarás tener instalado el Visual Studio 2008.

Formulario Facturas-Clientes usando LINQToSQL & C# (Spanish) from Raúl González on Vimeo

No hay comentarios:

Publicar un comentario