LINQ to SQL y Visual Basic 2008
LINQ to SQL (L2SQL)
Resumen general de lo publicado sobre LINQ hasta el momento:
Información general sobre LINQ
LINQ to Objects
LINQ to XML
LINQ to DataSet
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ández “C# 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.
15 Responsesso far
Hola Jorge
¿Has llegado a probar si existe sincronización (aunque sea forzándola)?
Por cierto aunque no tenga nada que ver… 😉
http://www.desarrollaconmsdn.com/msdn/CursosOnline/Curso_Intro_NET_VBNET/index.html
LINQ to Entities (L2E) Resumen general de lo publicado sobre LINQ hasta el momento: Información general
LINQ to Entities (L2E) Resumen general de lo publicado sobre LINQ hasta el momento: Información general
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.
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.
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
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
Y cuando las relaciones entre tablas no aparecen???? Como hariamos en forma manual para generarlas?
Gracias.
es t muy bien tu aportacion pero cambiastes algunas cosas k no esplicas a fondo
POR FAVOR AYUDENME CON UN MANUAL DE VISUAL BASIC 2008 GRACIAS
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»
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
lkfg nbjrypoh´cv´kj fkghrpojlf tihpp9lkh nkv,bnmñltg khnlkjh kjhoiyfdflk uo ukj igiu jh oijñlkj`p9uioy8ty
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
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:UsersomarDocumentsVisual Studio 2010ProjectsProyecto de CostosProyecto de CostosbinDebugdatabase1.mdf
y quisiera saber si hay como no tener esa dependencia con el servidor asi como pasa con access de Microsoft offices