martes, 1 de abril de 2008

Ds - Dt vs2005 - Data Label

DataSet/DataTable tipados y Table Adapter con Visual Studio 2005 y 2008
Introducción- Data Label- Capa de Datos- Capa de Negocios- UI Interfaz

Crear Capa de Datos

En esta fase del artículo definiremos la estructura de nuestra Base de Datos que llamaremos LinQ (La Base de datos que utilizamos en el ejercicio de linq to sql con las mismas entidades, para los que la tienen), así como los procedimientos almacenados que utilizaremos.

1 - Tablas
2 - Procedimientos

Debo mencionarles, que como hago estos ejemplos en la marcha, es decir, a medida que escribo el artículo, es posible que realicemos modificaciones o correcciones de los mismos en el transcurso del ejercicio. Espero que no, ya que la filosofía de trabajar a tres capas esta asociada a la posibilidad de definir cada paso del proyecto una vez terminada una fase anterior, es decir, modelamos e implantamos la Base de Datos, las entidades y los procedimientos almacenados, por que ya tenemos una versión sólida de esta que puede ser implementada, por lo cual la definición de una arquitectura debe ser ascendente. Con esto quiero decir, que, por lo menos en mi caso prefiero definir primero el modelo de datos, luego los procedimientos y funciones y a medida que se van agregando funcionalidades se debe seguir con el mismo paso, el modelo de datos, los procedimientos, y luego la Capa de Datos y la Capa de Negocios.


Mi objetivo no es enceñarles a trabajar Orientado a los objetos, pero en mi artículo de LinQ to Sql de Marzo del 2008 hago una receña a que es OO.


El modelo de datos que debemos implementar es muy simple, solo trabajaremos con 2 tablas y en la capa de datos, a pesar de definir un objeto con las dos entidades, solo crearemos los métodos de transacción de datos en una tabla. Bueno el modelo se observa a continuación:


Y como me gusta facilitarles las cosas les pongo los script de creación de los mismos. Para los que han realizado el ejemplo de Linq to Sql podrán apreciar que el modelo es el mismo.


TABLAS


CREATE TABLE [lnqEmpleado](
[empCodigo] [int] IDENTITY(1,1) NOT NULL,
[empNombre] [varchar](70) NOT NULL,
[empApellidoPrimero] [varchar](70) NOT NULL,
[empApellidoSegundo] [varchar](70) NOT NULL,
[empFechaActivacion] [datetime] NOT NULL,
[empEstado] [char](1) NOT NULL,
CONSTRAINT [PK_lnqEmpleado] PRIMARY KEY CLUSTERED
(
[empCodigo] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

CREATE TABLE [lnqUsuario](
[usuCodigo] [int] IDENTITY(1,1) NOT NULL,
[empCodigo] [int] NOT NULL,
[usuLogin] [char](10) NOT NULL,
[usuClave] [char](10) NOT NULL,
[usuEstado] [char](1) NOT NULL,
CONSTRAINT [PK_lnqUsuario] PRIMARY KEY CLUSTERED
(
[usuCodigo] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

ALTER TABLE [lnqUsuario] WITH CHECK ADD CONSTRAINT [FK_lnqUsuario_lnqEmpleado] FOREIGN KEY([empCodigo])
REFERENCES [lnqEmpleado] ([empCodigo])
ALTER TABLE [lnqUsuario] CHECK CONSTRAINT [FK_lnqUsuario_lnqEmpleado]

Los procedimientos almacenados que utilizaremos solo realizarán transacciones con la tabla lnqUsuario, estos procedimientos almacenados se los pongo a continuación (Miren que me gusta facilitar las cosas):


PROCEDIMIENTOS

CREATE PROCEDURE [dbo].[prcUsuarioConsultar]
@empCodigo int
AS
begin
select
lnqEmpleado.*
from
lnqEmpleado
where
lnqEmpleado.empCodigo = @empCodigo
end


CREATE PROCEDURE [prcUsuarioLista]
AS
begin
select
*
from
lnqUsuario
end

CREATE PROCEDURE [prcUsuarioInsertar]
@empCodigo int,
@usuLogin char(10),
@usuClave char(10),
@usuEstado char(1)
AS
begin
declare @iExiste int
set @iExiste = 0
select @iExiste = count(usuLogin) from lnqUsuario
where usuLogin = @usuLogin
if @iExiste>0
begin
return 1
end
else
begin
insert into lnqUsuario
(empCodigo, usuLogin, usuClave, usuEstado)
values
(@empCodigo, @usuLogin, @usuClave, @usuEstado)
end
return 0
end


CREATE PROCEDURE [prcUsuarioModificar]
@usuLogin char(10),
@usuClave char(10),
@usuEstado char(1)
AS
begin
declare @iExiste int
set @iExiste = 0
select @iExiste = count(usuLogin) from lnqUsuario
where usuLogin = @usuLogin
if @iExiste>0
begin
update lnqUsuario
set
usuClave = @usuClave,
usuEstado = @usuEstado
where
usuLogin = @usuLogin and
usuClave = @usuClave
end
return 0
end

CREATE PROCEDURE [prcUsuarioEliminar]
@usuLogin char(10),
@usuClave char(10)
AS
begin
declare @iExiste int
set @iExiste = 0
select @iExiste = count(usuLogin) from lnqUsuario
where usuLogin = @usuLogin
if @iExiste>0
begin
update lnqUsuario
set
usuEstado = 'I'
where
usuLogin = @usuLogin and
usuClave = @usuClave
end
return 0
end

No hay comentarios: