linq y el acceso a datos en visual basic 2008

31
LINQ y el acceso a datos con Visual Basic 2008 Guillermo 'guille' Som [email protected]

Upload: comunidad-unfv

Post on 07-Jun-2015

4.119 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: Linq y el acceso a datos en Visual Basic 2008

LINQ y el acceso a datos

con Visual Basic 2008

Guillermo 'guille' Som

[email protected]

Page 2: Linq y el acceso a datos en Visual Basic 2008

Agenda

•Un vistazo a LINQ

•Acceso a datos con LINQ

Page 3: Linq y el acceso a datos en Visual Basic 2008

Un vistazo a LINQ

• Las variantes de LINQ

• LINQ to Objects

• LINQ to XML

• LINQ to ADO.NET

o LINQ to DataSet

o LINQ to SQL

Page 4: Linq y el acceso a datos en Visual Basic 2008

Fuentes de datos LINQ

LINQ

To

Objects

Objetos

LINQ

To

XML

<book>

<title/>

<author/>

<price/>

</book>

XML

LINQ to ADO.NET

LINQ

To

Datasets

LINQ

To

SQL

LINQ

To

Entities

Relacional

Otros…Visual Basic C#

.NET Language-Integrated Query

Un vistazo a LINQ

Page 5: Linq y el acceso a datos en Visual Basic 2008

Un vistazo a LINQ

LINQ to Objects

•Permite acceder a datos en memoria usando la

tecnología de LINQ

• La condición es que esos datos expongan

IEnumerable o IEnumerable(Of T)

• Los arrays, colecciones, etc. cumplen esta condición

Page 6: Linq y el acceso a datos en Visual Basic 2008

LINQ to Objects

DEMO

Page 7: Linq y el acceso a datos en Visual Basic 2008

Un vistazo a LINQ

LINQ to XML

•Permite acceder a datos XML usando la

tecnología de LINQ

• En VB9 se mejora de forma que se pueden usar

literales de XML directamente en el código

Page 8: Linq y el acceso a datos en Visual Basic 2008

Un vistazo a LINQ

LINQ to ADO.NET

•Permite acceder a datos de ADO.NET usando la

tecnología de LINQ

• Se incluyen otras dos tecnologías:

• LINQ to DataSet

• LINQ to SQL

• Este será básicamente el tema de esta charla

Page 9: Linq y el acceso a datos en Visual Basic 2008

Agenda

•Un vistazo a LINQ

•Acceso a datos con LINQ

Page 10: Linq y el acceso a datos en Visual Basic 2008

Acceso a datos con LINQ y VB9

LINQ to DataSet

•Permite usar ADO.NET 2.0 con LINQ

Page 11: Linq y el acceso a datos en Visual Basic 2008

Acceso a datos con LINQ y VB9

LINQ to DataSet

• Simplificando mucho:

• Llenamos el DataSet y después usamos LINQ

para usar esos datos en memoria

Page 12: Linq y el acceso a datos en Visual Basic 2008

Acceso a datos con LINQ y VB9

LINQ to DataSet

•Cuando tengamos los datos en el DataSet,

usaremos LINQ para trabajar con ellos

Dim ta As New NorthwindDataSetTableAdapters. _

CustomersTableAdapter

Dim ds As New NorthwindDataSet

ta.Fill(ds.Customers)

Dim clientes = From cli In ds.Customers _

Where cli.Country.StartsWith("U") _

Order By cli.ContactName _

Select cli

For Each c In clientes

Console.WriteLine("{0}, {1}", c.ContactName, c.City)

Next

Page 13: Linq y el acceso a datos en Visual Basic 2008

Acceso a datos con LINQ y VB9

• Es importante saber que LINQ mantiene la

consulta en la variable usada

•Cada vez que usemos la variable se ejecutará la

consulta

• Esto nos permite tener la consulta siempre

actualizada

• Es lo que se conoce como ejecución aplazada

(deferred execution)

Page 14: Linq y el acceso a datos en Visual Basic 2008

Acceso a datos con LINQ y VB9

• Estos dos bucles mostrarán datos distintos, ya

que se ha cambiado un dato que se incluye en la

consulta

Dim clientes = From cli In ds.Customers _

Where cli.Country.StartsWith("U") _

Order By cli.ContactName _

Select cli

For Each c In clientes

Console.WriteLine("{0}: {1}, {2}", _

c.CustomerID, c.ContactName, c.Country)

Next

ds.Customers.Rows(18).Item("Country") = "Spain"

For Each c In clientes

Console.WriteLine("{0}: {1}, {2}", _

c.CustomerID, c.ContactName, c.Country)

Next

Page 15: Linq y el acceso a datos en Visual Basic 2008

Acceso a datos con LINQ y VB9

• Si queremos que la consulta solo se ejecute una

vez o de forma inmediata, debemos usar algún

método que la "lance" y la saque del estado

"hibernado" en el que está

• Si queremos que esos datos siempre sean los

mismos y no nos interese que se actualicen,

usaremos lo que se conoce como ejecución

inmediata

Page 16: Linq y el acceso a datos en Visual Basic 2008

Acceso a datos con LINQ y VB9

• El "truco" es asignar esos datos a una variable

usando el método ToArray

• También ToList o ToDictionary

•De esa forma, los datos que habrá en la variable

de la consulta permanecerán aunque se cambie

algo que afecte a la selección realizada

•Aunque si se cambian algunos de esos datos, se

reflejarán los cambios, pero no se "refrescará" la

consulta

Page 17: Linq y el acceso a datos en Visual Basic 2008

Acceso a datos con LINQ y VB9

• Estos dos bucles mostrarán los mismos clientes, a

pesar de que se cambie el país de uno de ellos

Dim clientes = (From cli In ds.Customers _

Where cli.Country.StartsWith("U") _

Order By cli.ContactName _

Select cli).ToArray

For Each c In clientes

Console.WriteLine("{0}: {1}, {2}", _

c.CustomerID, c.ContactName, c.Country)

Next

ds.Customers.Rows(18).Item("Country") = "Spain"

For Each c In clientes

Console.WriteLine("{0}: {1}, {2}", _

c.CustomerID, c.ContactName, c.Country)

Next

Page 18: Linq y el acceso a datos en Visual Basic 2008

Ejecución aplazada y ejecución inmediata

DEMO

Page 19: Linq y el acceso a datos en Visual Basic 2008

Acceso a datos con LINQ y VB9

LINQ to SQL

• Las bases de datos relacionales con LINQ

• (por ahora solo se soporta SQL Server y SQL Server

Compact 3.5)

Page 20: Linq y el acceso a datos en Visual Basic 2008

Acceso a datos con LINQ y VB9

• Existe una relación entre los objetos de LINQ y

los de la base de datos

LINQ to SQL Object Model Relational Data Model

Entity class Table

Class member Column

Association Foreign-key relationship

Method Stored Procedure or Function

Page 21: Linq y el acceso a datos en Visual Basic 2008

Acceso a datos con LINQ y VB9

LINQ to SQL Entity Classes y las tablas

•Para ligar una tabla con una clase, definimos la

clase y los campos a los que queremos acceder• Se necesita una referencia a System.Data.Linq.dll e importar los espacios de nombres:

System.Data.Linq.Mapping para los atributos y System.Data.Linq para el DataContext

<Table(Name:="Customers")> _

Public Class Customer

<Column()> _

Public CustomerID As String

<Column()> _

Public City As String

<Column()> _

Public ContactName As String

<Column()> _

Public Country As String

End Class

Page 22: Linq y el acceso a datos en Visual Basic 2008

Acceso a datos con LINQ y VB9

•Por supuesto, solo podremos acceder a los

campos que hayamos definido en la clase

Dim sCnn = "Data Source = (local)\SQLEXPRESS; " & _

"Initial Catalog = Northwind; " & _

"Integrated Security = True"

Dim dc As New DataContext(sCnn)

Dim losClientes = dc.GetTable(Of Customer)()

Dim q1 = From cli In losClientes _

Where cli.Country.StartsWith("U") _

Order By cli.ContactName _

Select cli

For Each c In q1

Console.WriteLine("{0}: {1}, {2}", _

c.CustomerID, c.ContactName, c.Country)

Next

Page 23: Linq y el acceso a datos en Visual Basic 2008

Acceso a datos con LINQ (manual)

DEMO

Page 24: Linq y el acceso a datos en Visual Basic 2008

Acceso a datos con LINQ y VB9

• También podemos crear funciones para

asociarlas a procedimientos almacenados y más

cosas, pero lo más fácil es no tener que hacerlo a

mano...

•Ya que podemos usar el O/R Designer

• O/R Designer = Object Relational Designer

•Con ese diseñador, crear clases, métodos y

demás "monerías" solo es cuestión de...

• ¡arrastrar y soltar!

Page 25: Linq y el acceso a datos en Visual Basic 2008

Acceso a datos con LINQ y VB9

•Con el diseñador de objetos relacionales,

arrastraremos las clases y los procedimientos

almacenados (o funciones) y se generará el

código para acceder a ellos directamente

• Es casi como los DataSet tipados, pero

accediendo directamente a los objetos de la base

de datos por medio de clases y métodos

Page 26: Linq y el acceso a datos en Visual Basic 2008

Acceso a datos con LINQ y VB9

Page 27: Linq y el acceso a datos en Visual Basic 2008

LINQ to SQL, OR / Designer

DEMO

Page 28: Linq y el acceso a datos en Visual Basic 2008

DUDAS, PREGUNTAS???

Page 29: Linq y el acceso a datos en Visual Basic 2008

http://www.elguille.info/NET/NovedadesVB9

Ya puedes conseguir

un libro sobre todas

las Novedades de

Visual Basic 2008

en formato PDF

Page 30: Linq y el acceso a datos en Visual Basic 2008

Nuevo libro en preparación

Si te gustan los puntos y comas... tu libro es:

Aprenda C# 3.0 desde 0.0

Parte 3: Lo nuevo

http://www.elguille.info/NET/AprendaCSharp3

Page 31: Linq y el acceso a datos en Visual Basic 2008

Guillermo ‘guille’ Som

[email protected]

http://www.elguille.info/

LINQ y el acceso a datos

con Visual Basic 2008