LINQ to SQL y Visual Basic 2008 - Jorge Serrano - MVP Visual Developer - Visual Basic

LINQ to SQL y Visual Basic 2008

Visual Studio 2008

LINQ to SQL (L2SQL) 

Resumen general de lo publicado sobre LINQ hasta el momento:

Dentro del paradigma del trabajo con LINQ y ADO.NET, nos encontramos con LINQ to SQL.

En otras entradas de este blog, nos introdujimos entre otros en LINQ to DataSet, y ahora le llega el turno a LINQ to SQL.

Dentro de los ámbitos del uso de ADO.NET y LINQ, encontramos dentro de Microsoft .NET Framework 3.5 la posibilidad de trabajar con LINQ to DataSet, LINQ to SQL y LINQ to Entities.

Para trabajar con otros datos no accesibles directamente desde ADO.NET, podemos utilizar LINQ to XML y LINQ to Objects.

El modelo de Microsoft .NET Framework 3.5 es el siguiente:

En nuestro caso vamos a trabajar con la parte correspondiente con LINQ to SQL.

LINQ to SQL es utilizado para trabajar con fuentes de datos SQL Server, si bien hay intentos en internet para trabajar con otras fuentes de datos diferentes.

Para desarrollar aplicaciones de múltiples base de datos, utilizaremos LINQ to Entities que ofrece además muchas más posibilidades que LINQ to SQL.

Para realizar este ejemplo o iniciar la toma de contacto con LINQ to SQL, vamos a utilizar el modelo de datos utilizado en el excelente libro de Octavio HernándezC# 3.0 y LINQ”.

Iniciaremos un nuevo proyecto de VB utilizando como plantilla la plantilla de aplicación para Windows y agregaremos un nuevo elemento en el proyecto.

El nuevo elemento será de tipo LINQ to SQL Classes y de extensión dbml (Database Markup Language). A ese elemento le daremos el nombre de Futbol2006 como se indica en la siguiente imagen:

Nada más insertar este elemento, veremos que por un lado se agregan al proyecto los ensamblados necesarios para trabajar con datos y LINQ, y por otro lado, aparece en pantalla un diseñador de los objetos relacionales vacío.

La idea es trabajar con él, pero antes de poder trabajar con el diseñador, deberemos agregar cierta información al mismo.

Para agregar esa información, la primera acción que realizaremos por lo tanto, será la de crear una conexión de datos con la base de datos FUTBOL2006.

Una vez establecida la conexión de datos, arrastraremos y soltaremos las tablas del modelo que queremos que aparezca en el diseñador de los objetos relacionales.
En el ORM observaremos entonces algo similar a lo siguiente.

Una particularidad en el diseñador, es que las relaciones entre tablas, quedan reflejadas dentro del modelo.

Partiendo de nuestro modelo de objetos relacionales, podemos trabajar con los objetos representados como si estuviéramos haciéndolo con la base de datos directamente.

A partir de aquí, trabajar con el modelo es coser y cantar.

En este ejemplo, vamos a agregar al formulario un control Button (btnSelectPlayers) y un control DataGridView (dgvPlayers).

Nuestro ejemplo en ejecución mostrará los jugadores de un club de futbol.

A continuación, vamos a escribir el siguiente código:

Public Class MainForm

   
' Declaramos el contexto para usarlo en todo el programa
   Private contexto As New Futbol2006DataContext()

   
Private Sub btnSelectPlayers_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSelectPlayers.Click
      
' Obtenemos los datos de Futbolistas segel equipo seleccionado
      Dim datos = From p In contexto.Futbolistas Where p.CodigoClub = Me.cboClubs.SelectedValue.ToString() Select p
      
' Volcamos los datos en el DataGridView
      Me.dgvPlayers.DataSource = datos
      
' Ajustamos los datos al control
      Me.dgvPlayers.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells)
   
End Sub

   Private Sub MainForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      
' Ejecutamos el mpara cargar los Clubs de Futbol
      LoadClubs()
   
End Sub

   Private Sub LoadClubs()
      
' Cargamos los Clubs de Futbol
      Dim datos = From p In contexto.Clubs Select p.Codigo, p.Nombre
      
Me.cboClubs.DataSource = datos
      
' Indicamos el valor a mostrar
      Me.cboClubs.DisplayMember = "Nombre"
      ' Indicamos el co clave asociado al valor mostrado
      Me.cboClubs.ValueMember = "Codigo"
   End Sub

End
 Class

El resultado de ejecutar nuestra aplicación de ejemplo es el que se indica a continuación:

Espero que el ejemplo sea lo suficientemente descriptivo como para entender de forma básica, como funciona LINQ to SQL.

Published 17/1/2008 0:50 por Jorge Serrano
Comparte este post:

Comentarios

Thursday, January 17, 2008 11:31 PM por AlbertoGs

# re: LINQ to SQL y Visual Basic 2008

Hola Jorge

¿Has llegado a probar si existe sincronización (aunque sea forzándola)?

Por cierto aunque no tenga nada que ver... ;)

www.desarrollaconmsdn.com/.../index.html

Friday, January 25, 2008 7:32 AM por El blog de Jorge

# LINQ to Entities y Visual Basic 2008 - Parte 1

LINQ to Entities (L2E) Resumen general de lo publicado sobre LINQ hasta el momento: Información general

Friday, January 25, 2008 9:05 AM por El blog de Jorge

# LINQ to Entities y Visual Basic 2008 - Parte 1

LINQ to Entities (L2E) Resumen general de lo publicado sobre LINQ hasta el momento: Información general

Saturday, January 26, 2008 12:52 AM por FEFE

# re: LINQ to SQL y Visual Basic 2008

Buenas Jorge, una pregunta sobre el tema:

¿Existe alguna manera de formar una query (para un Select) en donde la tabla sobre la que estas haciendo la consulta fuese dinámica?

Lo digo para saber si se pueden formar queries que no dependan del objeto que sobre el que se forman.

Un saludo.

Friday, February 01, 2008 11:16 AM por Jorge Serrano

# re: LINQ to SQL y Visual Basic 2008

Hola FEFE,

espero haberte entendido bien.

Podrías utilizar ExecuteQuery como por ejemplo:

Dim otrosDatos = contexto.ExecuteQuery(Of Futbolista)("Select * From Futbolista WHERE CodigoClub='RMA'")

Me.dgvPlayers.DataSource = otrosDatos.ToList()

De esta manera, atacaríamos a la tabla Futbolista, fuera del uso propio de LINQ a través de su contexto que establece la conexión con el modelo de datos.

Luego recuperaríamos la información y la mostraríamos en el DataGridView (por ejemplo).

Si la tabla no existe dentro del modelo, .NET no encontrará forma de asociar la tabla a la entidad del modelo y no se podrá acceder de forma directa.

Espero que esto te aporte alguna ayuda.

Friday, February 22, 2008 7:35 PM por miriam

# re: LINQ to SQL y Visual Basic 2008

hola!! sorry por la pregunta estoy intentando hacer la conexion de sql express con visual basic 2008 pero cuando agrego la coneccion me dice que el archivo esta en uso, la BD pero tengo cerrado el SQL. la verdad es que no se que pueda ser te agradeceria una contestacion y otro ejemplo si es que lo tienes.

mi correo electronico es: mirivonbh@hotmail.com

Thursday, June 26, 2008 5:10 PM por Hector

# re: LINQ to SQL y Visual Basic 2008

Holas aqui un novato en programacion.

Quiero hacer un query desde mi visual basic 2008.Como? alguna idea

Por otro lado tengo un programa desarrollado en visual basic 6 quiero hacerle un upgrade ? se puede, uso ADOdb

Friday, October 24, 2008 1:43 AM por Eserrano

# re: LINQ to SQL y Visual Basic 2008

Y cuando las relaciones entre tablas no aparecen???? Como hariamos en forma manual para generarlas?

Gracias.

Tuesday, October 27, 2009 3:24 AM por saludar

# re: LINQ to SQL y Visual Basic 2008

es t muy bien tu aportacion pero cambiastes algunas cosas k no esplicas a fondo

Wednesday, November 18, 2009 1:29 AM por VALERIA

# Visual Basic 2008

POR FAVOR AYUDENME CON UN MANUAL DE VISUAL BASIC 2008 GRACIAS

Tuesday, September 21, 2010 6:20 PM por Alberto

# Visual Basic 2008 y SQL (Como Grabar en la base)

Buen dia Jorge

Elabore un ejercicio de los tantos que se muestran en internet para grabar datos en una base de datos sql

Pero resulta que realmente los datos no se graban, (se muestran unicamente en el datagridview pero no se graban, sera posible por favor puedas ayudarme, este es el codigo que empleado desde luego el 95% se muestra en automatico yo solo agrege algunas lineas:

Public Class FrmClientes

   Private Sub ClientesBindingNavigatorSaveItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

       Me.Validate()

       Me.ClientesBindingSource.EndEdit()

       Me.TableAdapterManager.UpdateAll(Me.Database01DataSet)

   End Sub

   Private Sub FrmClientes_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

       'TODO: esta línea de código carga datos en la tabla 'Database01DataSet.Clientes' Puede moverla o quitarla según sea necesario.

       Me.ClientesTableAdapter.Fill(Me.Database01DataSet.Clientes)

   End Sub

   Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click

       REM * * *      Salir del Modulo      * * *

       Close()

   End Sub

   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

       REM * * *     Agregar Cliente Nuevo     * * *

       CLVCLITextBox.Focus()

       Me.ClientesBindingSource.AddNew()

   End Sub

   Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click

       REM * * *    Borrar Registro Actual     * * *

       If MessageBox.Show("Desea Eliminar el Cliente seleccionado? ", "xxx") Then

           Me.ClientesBindingSource.RemoveCurrent()

           Me.ClientesBindingSource.EndEdit()

       End If

   End Sub

   Private Sub Button8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button8.Click

       REM * * *     Grabar el Registro Actual     * * *

       Me.ClientesTableAdapter.Update(Me.Database01DataSet.Clientes)

       MessageBox.Show("Nuevo Cliente Grabado ", "xxx")

   End Sub

   Private Sub ULVCLIDateTimePicker_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ULVCLIDateTimePicker.ValueChanged

   End Sub

End Class

Agradesco de antemano tu apreciable ayuda, y si no es abusar tendras algun pequeño programa ejemplo en el cual realmente se graben los datos en la SQL con VB 2008

SALUDOS

"alberto_a_b@yahoo.com.mx"

Tuesday, September 21, 2010 9:07 PM por Jorge Serrano

# re: LINQ to SQL y Visual Basic 2008

Alberto,

¿podrías dejarme el código en un proyecto junto a una base de datos de prueba y en algún lugar (zip, rar) para poder testearlo?.

Intentaré hacer lo que pueda.

Un saludo,

Jorge

Wednesday, November 24, 2010 9:59 PM por eriuyih8a9

# re: LINQ to SQL y Visual Basic 2008

lkfg nbjrypoh´cv´kj fkghrpojlf tihpp9lkh nkv,bnmñltg khnlkjh kjhoiyfdflk uo ukj igiu jh oijñlkj`p9uioy8ty

Wednesday, August 10, 2011 8:16 PM por Delsy

# re: LINQ to SQL y Visual Basic 2008

hola jorge por que me sale el error en contexto me dece que es incorrecta    

Private contexto As New Futbol2006DataContext()

seria que debo agregar algo disculpa es que soy nueva en este tipi de conexion

Thursday, August 18, 2011 2:11 AM por omar_judai

# sql server 2008 + Visual Basic 2010

saludos

yo tambien hice uno de esos programas que hay en el internet

mi problema esta en que cuando llevo mi aplicacion a otros pc's me sale un error indicando que no encuentra al servidor ej: C:\Users\omar\Documents\Visual Studio 2010\Projects\Proyecto de Costos\Proyecto de Costos\bin\Debug\database1.mdf

y quisiera saber si hay como no tener esa dependencia con el servidor asi como pasa con access de Microsoft offices