InicioArticulos y noticiasBases de datosProgramaciónForosInternetServiciosContratacionEmail
También puedes ver ...
SET IDENTITY_INSERT ON y LinqToSQL
Creando cadenas de conexión ConnectionStrings en .net 3.5 o visual Studio 2008 usando SqlConnectionStringBuilder
Migración de WSE a WCF (Web Services de 2005 a 2008)
Generar archivos PDF con C#
SQL Server 2008
TransactionScope - Simplificando el trabajo con transacciones.
Formatear números en SQL Server
Cómo activar Intelisense (autocompletado) en el Web.config
Leer un campo XML de SQL Server 2005 con C#
TripleDES - Un ejemplo practico en C#

Afiliados
La Web del programador
MundoProgramacion


 

LinQ To SQL - Un ejemplo sencillo

    En este articulo vamos a intentar explicar como funciona Linq To SQL. Para empezar diremos que Linq To Sql es un ORM ligero para bases de datos, con soporte para Linq integrado, disponible en la nueva versión de .NET framework.

    Para quienes no sepan que es un ORM diremos que es un mapeo entre objetos de bases de datos y objetos de un lengunaje de programación, en nuestro caso serán clases de C#. Es decir, a cada objeto de la base de datos le corresponde un objeto (Clase) de C#.

    Lo primero que vamos a necesitar para desarrollar nuestro ejemplo es una pequeña base de datos de SQL Server 2005, que crearemos ejecutando el siguiente script.

 

CREATE DATABASE LINQDB

GO

USE LINQDB

GO

 

if exists (

select 1

from sysobjects

where id = object_id('Perfiles')

and type = 'U'

)

drop table Perfiles

go

 

if exists (

select 1

from sysobjects

where id = object_id('Usuarios')

and type = 'U'

)

drop table Usuarios

go

 

if exists (

select 1

from sysobjects

where id = object_id('UsuariosPerfiles')

and type = 'U'

)

drop table UsuariosPerfiles

go

/*==============================================================*/

/* Table: Perfiles */

/*==============================================================*/

create table Perfiles

(

CodPerfil int identity,

Perfil varchar(100) not null,

Activo char(1) not null

constraint CKC_ACTIVO_PERFILES

check (Activo in ('S','N')),

constraint PK_PERFILES

primary key (CodPerfil)

)

go

/*==============================================================*/

/* Table: Usuarios */

/*==============================================================*/

create table Usuarios

(

CodUsuario int identity,

Usuario varchar(255) not null,

Clave varchar(255) not null,

FxAlta datetime not null,

Activo char(1) not null

constraint CKC_ACTIVO_USUARIOS

check (Activo in ('S','N')),

constraint PK_USUARIOS

primary key (CodUsuario)

)

go

/*==============================================================*/

/* Table: UsuariosPerfiles */

/*==============================================================*/

create table UsuariosPerfiles

(

CodUsuario int not null,

CodPerfil int not null,

constraint PK_USUARIOSPERFILES

primary key (CodUsuario, CodPerfil)

)

go

alter table UsuariosPerfiles

add constraint FK_USUARIOS_REFERENCE_USUARIOS

foreign key (CodUsuario)

references Usuarios (CodUsuario)

go

alter table UsuariosPerfiles

add constraint FK_USUARIOS_REFERENCE_PERFILES

foreign key (CodPerfil)

references Perfiles (CodPerfil)

go

    La base de datos es muy sencilla y contiene solo tres tablas:

  • Usuarios - Que contiene la lista de usuarios.
  • Perfiles  - Que contiene la lista de perfiles.
  • UsuariosPerfiles - Que define los perfiles asignados a cada usuario.

    En realidad en el articulo solo utilizaremos la tabla de usuarios, pero incluimos tres para demostrar como el asistente de Visual Studio genera multiples clases con Linq To Sql.

    Abrimos nuestro Visual Studio 2008 y creamos un nuevo proyecto de tipo Win Forms - es solo la elección que yo he hecho, pero podemos usar Linq To Sql en cualquier proyecto!.

     En primer lugar, seleccionamos añadir nuevo elemento y seleccionamos Linq To Sql Classes, llamaremos al archivo LinqDb.dbml. 

 

[Ampliar Imagen]

    Con esta acción debemos tener tres nuevos archivos en el proyecto.

  • LinqDb.dbml - es archivo xml que define el mapeo.
  • LinqDb.dbml.layout - es un archivo xml que utiliza el diseñador.
  • LinqDb.designer.cs. - archivo de C# donde se definen las clases y el contexto (la conexión). 


[Ampliar Imagen]

    Lo siguiente que debemos hacer es definir una conexión a nuestra base de datos. Abrimos el explorador de servidores y añadimos una nueva conexión.


[Ampliar Imagen]

    Probamos la conexión y guardamos.

    Lo siguiente que vamos a hacer es generar las clases de mapeo con la base de datos. En el explorador del proyecto hacemos doble click en el archivo Linqdb.dbml - con lo que Visual Studio abrirá el diseñador gráfico.

    En la ventana del explorador de servidores, seleccionamos la base de datos que hemos creado al inicio del articulo y desplegamos las tablas.

[Ampliar Imagen]

    Seleccionamos las tablas que queramos mapear a C# y arrastramos sobre el diseñador. Al arrastrar generamos la clases de mapeo - clases que representan los objetos de base de datos.


[Ampliar Imagen]

    Visula Studio nos preguntará si queremos almacenar la información de la conexión a la base de datos en el archivo de configuración de la aplicación.

    Una vez hecho esto, podemos examinar el visor de clases, y veremos que se han añadido las siguientes clases a nuestro proyecto:

  • Una clase DataContext - Que representa el contexto de la conexión.
  • Una clase por cada tabla que hayamos seleccionado. Cada clase tendrá una propiedad por cada campo de la tabla a la que representa.


[Ampliar Imagen]

    En nuestro proyecto se han creado las siguientes clases:

  • LinqDbDataContext
  • Usuarios
  • Perfiles
  • UsuariosPerfiles

    La explicación de estas clases la abordaremos es futuros articulos, pero es importante destacar que si queremos hacer algún cambio en las clase generadas debemos hacerlo en un archivo aparte, aprobechando que son clases parciales. De esta forma podremos regenerar el ORM en cualquier momento sin afectar a nuestro código.

    De momento, Visual Studio ha realizado todo el trabajo por nosostros.

    Con todo esto añadimos un formulario a nuestro proyecto, en el colocamos tres campos para grabar datos en la tabla de usuarios - el nombre de usuario, la clave de acceso y la fecha de alta.


[Ampliar Imagen]

    Escribimos la siguiente clase LinqTest, que dará de alta y buscará usuarios. Tiene los siguientes métodos:

  • AddUsuario - que dará de alta un usuario en la base de datos
  • QueryUsuarioByCodigo - que utilizará Linq para recuperar los datos de un usuario.

 

partial class LinqTest

{

LinqDbDataContext dc = new LinqDbDataContext();

const char SI = 'S';

internal void AddUsuario(string nombre, string clave,

DateTime fecha)

{

Usuarios usuario = new Usuarios();

usuario.Usuario1 = nombre;

usuario.Clave = clave;

usuario.Activo = SI;

usuario.FxAlta = fecha;

dc.Usuarios.InsertOnSubmit(usuario);

dc.SubmitChanges();

//Probamos si recupera bien los identitys

MessageBox.Show(

String.Format("Se ha dado de alta el usuario {0}
con el código {1}"
,

nombre,

usuario.CodUsuario.ToString())

);

}

 

internal Usuarios QueryUsuarioByCodigo(int codigo)

{

var usu = from u in dc.Usuarios

where u.CodUsuario == codigo

select u;

if (usu.Count() > 0)

return usu.First();

else

return null;

}

}

    Y ahora el código del formulario para consumir la clase, también muy sencillo:

 

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

 

private void cmdAlta_Click(object sender, EventArgs e)

{

// Damos de alta el registro e inicializamos

LinqTest obj = new LinqTest();

obj.AddUsuario( txtUsuario.Text ,

txtClave.Text,

dtpFxAlta.Value);

PonerDatosEnPantalla(null);

}

 

private void cmdBuscar_Click(object sender, EventArgs e)

{

// Buscamos y ponemos los datos en pantalla.

LinqTest obj = new LinqTest();

frmBuscar f = new frmBuscar();

f.ShowDialog();

int codUsuario = f.ReturnValue;

Usuarios u = obj.QueryUsuarioByCodigo(codUsuario);

PonerDatosEnPantalla(u);

}

 

void PonerDatosEnPantalla(Usuarios u)

{

if (u != null)

{ // Ponemos los datos

txtUsuario.Text = u.Usuario1;

txtClave.Text = u.Clave;

dtpFxAlta.Value = u.FxAlta;

}

else

{ // Inicializamos el formulario

txtUsuario.Text = String.Empty ;

txtClave.Text = String.Empty;

dtpFxAlta.Value = DateTime.Now;

}

}

}

    El código es muy sencillo, pero lo explicamos brevemente:

  • Boton de alta (cmdAlta_Click) - crea una instancia de LinqTest y le pasa los valores del formulario para que dé de alta un registro.
  • Botón de búsqueda (cmdBuscar_Click) - pide al usuario un código y utilizando una instancia de LinqTest consulta los datos para mostrarlos en pantalla.

    Como podemos ver el código se ayuda un formulario de busqueda, tambien muy sencillo.


[Ampliar Imagen]

    Por si alguien quiere el código del formulario de busqueda ...

 

public partial class frmBuscar : Form

{

public frmBuscar()

{

InitializeComponent();

}

 

private void cmdBuscar_Click(object sender, EventArgs e)

{

this.Close();

}

 

public int ReturnValue

{

get { int i = 0;

int.TryParse(txtCodigo.Text,out i);

return i;

}

}

}

    Pues bien, con esto terminamos. Saludos y hasta la proxima. DJK.


 Versión para imprimir  Foros de consulta


Añadir comentario ... Para preguntar utiliza los foros
Autor:

Título:


Para preguntar utiliza los foros.



 Versión para imprimir

LinQ To SQL - Un ejemplo sencillo
Autor: Pedro Herrarte Sánchez
Visitas: 7396 Fecha de publicación: 01/07/2008
Pedro Herrarte, es consultor independiente, ofreciendo servicios de consultoría, análisis, desarrollo y formación.

Posee mas de diez años de experiencia trabajando para las principales empresas de España.

Es especialista en tecnologías .NET, entornos Web, bases de datos (SQL Server y ORACLE) e integración de sistemas.

Es experto en desarrollo (C#, ASP.NET, VB.Net, T-SQL, PL/SQL, , ASP, CGI , C, Pro*C, Java, Essbase, Vignette, PowerBuilder y Visual Basic ...) y bases de datos (SQL Server y ORACLE).

Es fundador, diseñador y programador de www.devjoker.com.




Visitas: 305 | Comentarios: 0 | Archivo: Articulos
Categorias: ASP.NET|CSS|ASP.NET
Visitas: 137 | Comentarios: 0 | Archivo: Articulos
Categorias: TFS
Visitas: 101 | Comentarios: 5 | Archivo: Articulos
Categorias: TFS
Visitas: 430 | Comentarios: 4 | Archivo: Articulos
Categorias: Transact-SQL|LinQ
Visitas: 1449 | Comentarios: 6 | Archivo: Articulos
Categorias: Visual Basic .NET|C#|ASP.NET|ASP.NET|Programación|ADO.NET
27/09/2008 Navegando ....
Visitas: 239 | Comentarios: 0 | Archivo: Articulos
Categorias: Humor
Visitas: 611 | Comentarios: 0 | Archivo: Articulos
Categorias: Visual Basic .NET|C#|ASP.NET|ASP.NET|Programación|WCF
Visitas: 2577 | Comentarios: 4 | Archivo: Articulos
Categorias: C#
Visitas: 464 | Comentarios: 0 | Archivo: Articulos
Categorias: JavaScript|ASP.NET
Visitas: 1072 | Comentarios: 0 | Archivo: Articulos
Categorias: Windows XP|Linux|Windows Vista

Útimos temas recibidos en los foros ...
replicacion de datos por jade ... [SQL Server] 0 21/11/2008
Enviar un email con C# utilizando .Net FrameWork 2.0 con logo... por Moises ... [ASP.NET] 1 21/11/2008
Crystal reports XI Release 2 y asp.net por mvargas ... [ASP.NET] 0 21/11/2008
Enviar un email con C# utilizando .Net FrameWork 2.0 por Moises ... [C#] 0 21/11/2008
Cuestión de BFILE. por Megatron ... [ORACLE] 0 21/11/2008
Enviar email por Dol ... [ASP.NET] 5 21/08/2007
*******PREGUNTA********: por T.S.U.En Informatíca ... [Visual Basic 6.0] 5 17/03/2008
Programar tareas en oracle. por Rodrigo ... [ORACLE] 0 21/11/2008
fechas con datatimepicker por peyin ... [Visual Basic .NET] 3 20/11/2008
agregar datos de un gridview a un textbox por jhors ... [ASP.NET] 3 19/09/2007
Select de sql en c# por Stuart ... [C#] 1 20/11/2008
Manual en Español de SQL Navigator for Oracle por Maira ... [ORACLE] 12 30/03/2008

Access CGI JSP ORACLE UNIX
Actualidad HTML/DHTML/XHTML LINUX PHP Visual Basic .NET
ASP ISAPI MS DOS Power Builder Visual Basic 6.0
ASP.NET Java mySQL SQL WIN 98/NT/2000/XP
C# JavaScript Opinion SQL Server

devjoker  Te recomendamos además ...
01/04/2006 Estructuras de control en PL/SQL    forma parte de...Tutorial PL/SQL
01/06/2006 Cursores de actualización en PL/SQL    forma parte de...Tutorial PL/SQL
21/02/2006 Introducción a .NET
22/10/2005 El lenguaje SQL    forma parte de...Tutorial SQL
31/03/2006 Operadores en PL/SQL    forma parte de...Tutorial PL/SQL
24/07/2006 Transacciones autónomas    forma parte de...Tutorial PL/SQL
14/11/2006 Escribir un fichero en formato unicode UTF-16 con VB.net
20/07/2006 Transacciones con PL/SQL    forma parte de...Tutorial PL/SQL
23/05/2006 Cursores en PL/SQL    forma parte de...Tutorial PL/SQL
06/07/2007 Select FOR XML    forma parte de...Tutorial de Transact SQL

 

Encuesta
¿A que perfil te adaptas mejor?
[Ver] [Votar]