Programacion de base de datos - unidad 3 Programacion de base de datos
1. TECNOLÓGICO NACIONAL DE MÉXICO
Ingeniería en Sistemas Computacionales
Programación de Base de Datos
Unidad III: Programación de Base de Datos
Material de clase desarrollado para la asignatura de Programación de Base de Datos
para Ingeniería en Sistemas Computacionales
PROGRAMACIÓN DE BASE DE DATOS
2. PROGRAMACIÓN DE BASE DE DATOS
Competencia:
• Manejar un lenguaje de programación visual y la conexión a la base de
datos mediante código SQL embebido.
3. Introducción
• La Programación del lado del servidor es una tecnología que consiste en
el procesamiento de una petición de un usuario mediante la
interpretación de un conjunto de instrucciones en el servidor de BD para
generar un conjunto de datos procesados como respuesta.
• Todo lo que suceda dentro del servidor es llamado procesamiento del
lado del servidor, o server-side processing.
PROGRAMACIÓN DE BASE DE DATOS
4. • Cuando tu aplicación necesita interactuar con el servidor (por ejemplo,
para cargar o guardar datos), ésta realiza una petición del lado del cliente
(client-side request) y puede ser desde una aplicación o desde el
navegador. Mientras la aplicación continúa trabajando, el servidor está
ejecutando código del lado del servidor.
• La utilización de las diferentes aplicaciones o servicios de Internet se lleva
a cabo respondiendo al llamado modelo cliente-servidor.
PROGRAMACIÓN DE BASE DE DATOS
5. • Cuando se utiliza un servicio en Internet, como consultar una base de
datos, transferir un archivo o participar en un foro de discusión, se
establece un proceso en el que entran en juego dos partes:
Por un lado: El usuario, quien ejecuta una aplicación en procesador
local, el denominado programa cliente. Este programa cliente se
encarga de ponerse en contacto con el procesador remoto para
solicitar el servicio deseado.
Por otro lado: El procesador remoto por su parte responderá a lo
solicitado mediante un programa que esta ejecutando. Este último se
denomina programa servidor.
• Los términos cliente y servidor se utilizan tanto para referirse a los
programas que cumplen estas funciones, como a las computadoras
donde son ejecutados esos programas.
PROGRAMACIÓN DE BASE DE DATOS
6. Creación de vistas
• Una vista es una consulta, que refleja el contenido de una o más tablas,
desde la que se puede acceder a los datos como si fuera una tabla. Dos
son las principales razones por las que podemos crear vistas.
Seguridad, nos pueden interesar que los usuarios tengan acceso a
una parte de la información que hay en una tabla, pero no a toda la
tabla.
Comodidad, como ya sabemos el modelo relacional no es el más
cómodo para visualizar los datos, lo que nos puede llevar a tener que
escribir complejas sentencias SQL, tener una vista nos simplifica esta
tarea.
PROGRAMACIÓN DE BASE DE DATOS
7. • Las vistas no tienen una copia física de los datos, son consultas a los
datos que hay en las tablas, por lo que si actualizamos los datos de una
vista, estamos actualizando realmente la tabla, y si actualizamos la tabla
estos cambios serán visibles desde la vista.
• No siempre podremos actualizar los datos de una vista, esto dependerá
de la complejidad de la misma (dependerá de si el conjunto de resultados
tiene acceso a la clave principal de la tabla o no), y del gestor de base de
datos.
• No todos los gestores de bases de datos permiten actualizar vistas,
ORACLE, por ejemplo, no lo permite, mientras que SQL Server sí.
PROGRAMACIÓN DE BASE DE DATOS
8. Creación de vistas en SQL Server
Para crear una vista debemos utilizar la sentencia CREATE VIEW,
debiendo proporcionar un nombre a la vista y una sentencia
SQL SELECT válida.
Sintaxis:
CREATE VIEW <nombre_vista> AS
(<sentencia_select>);
PROGRAMACIÓN DE BASE DE DATOS
Ejemplo en SQL Server
CREATE VIEW vAlquileres AS (
SELECT nombre, apellidos, folio
FROM tAlquileres, tClientes
WHERE ( tAlquileres.codigo_cliente = tClientes.codigo ))
Consultar datos de la Vista
SELECT * FROM vAlquileres
Eliminar una Vista
DROP VIEW vAlquileres;
9. Ejemplo de como extraer información de una vista usando C#
PROGRAMACIÓN DE BASE DE DATOS
String consulta = "SELECT * FROM vAlquileres;"
SqlCommand commando = new SqlCommand(consulta, conectar);
connectar.Open();
SqlDataReader reader = command.ExecuteReader();
try {
while (reader.Read()) {
Console.WriteLine(String.Format("{0}, {1} , {2}", reader[0], reader[1], reader[2]));
}
} finally {
reader.Close();
}
10. Cursores en SQL Server
• En SQL Server un cursor puede definirse como un elemento que representará
a un conjunto de datos determinado por una consulta T-SQL, el cursor
permitirá recorrer fila a fila, leer y eventualmente modificar dicho conjunto de
resultados.
• La creación y utilización de un cursor estará compuesta, como es de esperarse,
por una serie de instrucciones T-SQL, las cuales podrán separarse en grupos
bien diferenciados, los cuales son:
Declaración,
Apertura,
Acceso a datos,
Cierre y
Desalojo.
PROGRAMACIÓN DE BASE DE DATOS
11. DECLARE @Desc AS nvarchar(400)
DECLARE ProdInfo CURSOR FOR SELECT [Description] FROM ProductDesc
OPEN ProdInfo
FETCH NEXT FROM ProdInfo INTO @Desc
WHILE @@fetch_status = 0
BEGIN
PRINT @Description
FETCH NEXT FROM ProdInfo INTO @Description
END
CLOSE ProdInfo
DEALLOCATE ProdInfo
PROGRAMACIÓN DE BASE DE DATOS
Ejemplo del uso de cursores en SQL Server
12. Creación de Funciones en SQL Server
• Una función definida por el usuario es una rutina de Transact-SQL o Common
Language Runtime (CLR) que acepta parámetros, realiza una acción, como un
cálculo complejo, y devuelve el resultado de esa acción como un valor. El valor
devuelto puede ser un valor escalar (único) o una tabla.
Sintaxis
CREATE [ OR ALTER ] FUNCTION [ schema_name. ] function_name
( [ { @parameter_name [ AS ][ type_schema_name. ] parameter_data_type
[ = default ] [ READONLY ] }
[ ,...n ]
] )
RETURNS return_data_type
PROGRAMACIÓN DE BASE DE DATOS
13. CREATE FUNCTION dbo.inventario(@ProductID int)
RETURNS numeric(6,4)
AS
-- La function regresa el nivel de Stock de un producto
BEGIN
DECLARE @ret numeric(6,4);
SELECT @ret = SUM(p.Quantity)
FROM Production.ProductInventory p
WHERE p.ProductID = @ProductID
AND p.LocationID = '6';
IF (@ret IS NULL)
SET @ret = 0;
RETURN @ret;
END;
PROGRAMACIÓN DE BASE DE DATOS
Ejemplo del uso de funciones en SQL Server
14. Triggers en SQL Server
• Un desencadenador (trigger) es una clase especial de procedimiento
almacenado que se ejecuta automáticamente cuando se produce un
evento en el servidor de bases de datos.
SQL Server permite crear varios desencadenadores para una instrucción
específica.
PROGRAMACIÓN DE BASE DE DATOS
15. • Desencadenadores DML: se ejecutan cuando un usuario intenta
modificar datos mediante un evento de lenguaje de manipulación de
datos (DML). Los eventos DML son instrucciones INSERT, UPDATE o
DELETE de una tabla o vista (puede usar INSERTE o DELETED).
• Desencadenadores DDL: se ejecutan en respuesta a una variedad de
eventos de lenguaje de definición de datos (DDL). Estos eventos
corresponden principalmente a instrucciones CREATE, ALTER y DROP de
Transact-SQL, y a determinados procedimientos almacenados del sistema
que ejecutan operaciones de tipo DDL.
• Desencadenadores logon: se activan en respuesta al evento LOGON que
se genera cuando se establece la sesión de un usuario.
PROGRAMACIÓN DE BASE DE DATOS
Según el tipo de evento que los desencadena se clasifican en:
16. CREATE [ OR ALTER ] TRIGGER [ schema_name . ]trigger_name
ON { table | view }
[ WITH <dml_trigger_option> [ ,...n ] ]
{ FOR | AFTER | INSTEAD OF }
{ [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] }
[ WITH APPEND ]
[ NOT FOR REPLICATION ]
AS { sql_statement [ ; ] [ ,...n ] | EXTERNAL NAME <method specifier [ ; ] > }
<dml_trigger_option> ::=
[ ENCRYPTION ]
[ EXECUTE AS Clause ]
<method_specifier> ::=
assembly_name.class_name.method_name
PROGRAMACIÓN DE BASE DE DATOS
Sintaxis de un triguer en SQL Server: funciona sobre un INSERT,
DELETE, o UPDATE a una tabla o vista
17. USE Gestion
GO
CREATE TRIGGER ActualizaVentasEmp
ON pedidos FOR INSERT
AS
UPDATE empleados SET ventas=ventas + inserted.importe
FROM empleados, inserted
WHERE numemp=inserted.rep;
GO
PROGRAMACIÓN DE BASE DE DATOS
Ejemplo del uso de triggers en SQL Server
18. Procedimientos Almacenados en SQL Server
• Un procedimiento almacenado de SQL Server es un grupo de una o varias
instrucciones Transact-SQL. Los procedimientos se asemejan a las
construcciones de otros lenguajes de programación, porque pueden:
Aceptar parámetros de entrada y devolver varios valores en forma de
parámetros de salida al programa que realiza la llamada.
Contener instrucciones de programación que realicen operaciones en la
base de datos. Entre otras, pueden contener llamadas a otros
procedimientos.
Sintaxis:
CREATE [PROCEDURE|PROC] nombre_procedimiento [#|##] [(
parámetro1,parámetro2,... )]
[{FOR REPLICATION|WITH RECOMPILE}][WITH ENCRYPTION]
AS<bloque de sentencias>
PROGRAMACIÓN DE BASE DE DATOS
19. -- actualización de precios de productos: se recibe como parámetro
-- el tipo de cambio del dólar; por medio del procesamiento almacenado
-- se modifica el precio en pesos de los productos con base en su
-- valor en dólares.
USE almacen;
GO
CREATE PROCEDURE ProdPrecio
@tCambio numeric(6,4) AS
UPDATE productos set pt_precio = p_precio_dllr * tCambio;
GO
PROGRAMACIÓN DE BASE DE DATOS
Creación de Procedimientos Almacenados en SQL Server
Ejecución de un SP
USE almacen;
GO
EXEC dbo. ProdPrecio @tCambio = 21.57;
20. Elementos de Transac-SQL
• SQL es un lenguaje de consulta para los sistemas de bases de datos relaciónales,
pero que no posee la potencia de los lenguajes de programación. No permite el uso
de variables, estructuras de control de flujo, bucles y demás elementos
característicos de la programación. No es de extrañar, SQL es un lenguaje de
consulta, no un lenguaje de programación.
• Transact-SQL es el lenguaje de programación que proporciona Microsoft SQL
Server para extender el SQL estándar con otro tipo de instrucciones y elementos
propios de los lenguajes de programación .
• Con Transact-SQL vamos a poder programar las unidades de programa de la base
de datos SQL Server, están son:
Procedimientos almacenados
Funciones
Triggers (disparadores)
Scripts
PROGRAMACIÓN DE BASE DE DATOS
21. Tipos de datos numéricos: SQL Server dispone de varios tipos de datos numéricos.
Cuanto mayor sea el número que puedan almacenar mayor será en consecuencia el
espacio utilizado para almacenarlo. Como regla general se recomienda usar el tipo
de dato mínimo posible. Todos los dato numéricos admiten el valor NULL.
bit: puede almacenar el rango de valores de 1 a 0.
tinyint: puede almacenar el rango de valores de 0 a 255.
smallint: puede almacenar el rango de valores -32768 a 32767.
int: puede almacenar el rango de valores -231 a 231-1 .
bigint: puede almacenar el rango de valores -263 a 263-1.
decimal(p,s): puede almacenar datos numéricos decimales sin redondear. Donde p es
la precisión (número total del dígitos) y s la escala (número de valores decimales).
Money: Almacena valores numéricos monetarios de -263 a 263-1, con una precisión de
hasta diez milésimas de la unidad monetaria.
PROGRAMACIÓN DE BASE DE DATOS
22. Tipos de datos de carácter
• Char(n): Almacena n caracteres en formato ASCII, un byte por cada letra. Cuando
almacenamos datos en el tipo char, siempre se utilizan los n caracteres indicados, incluso si la
entrada de datos es inferior. Por ejemplo, si en un char(5), guardamos el valor 'A', se
almacena 'A ', ocupando los cinco bytes.
• Varchar(n): Almacena n caracteres en formato ASCII, un byte por cada letra. Cuando
almacenamos datos en el tipo varchar, únicamente se utilizan los caracteres necesarios. Por
ejemplo, si en un varchar(255), guardamos el valor 'A', se almacena 'A', ocupando solo un
byte bytes.
• Varchar(max): Igual que varchar, pero al declararse como max puede almacenar 231-1 bytes.
• Nchar(n): Almacena n caracteres en formato UNICODE, dos bytes por cada letra. Es
recomendable utilizar este tipo de datos cuando los valores que vayamos a almacenar puedan
pertenecer a diferente idiomas.
• Nvarchar(n): Almacena n caracteres en formato UNICODE, dos bytes por cada letra. Es
recomendable utilizar este tipo de datos cuando los valores que vayamos a almacenar puedan
pertenecer a diferente idiomas.
• Nvarchar(max): Igual que varchar, pero al declararse como max puede almacenar 231-1
bytes.
PROGRAMACIÓN DE BASE DE DATOS
23. Tipos de datos de fecha
• Datetime: Almacena fechas con una precisión de milisegundo. Debe
usarse para fechas muy especificas.
• SmallDatetime: Almacena fechas con precisión de minutos, por lo que
ocupa la mitad de espacio de que el tipo datetime, para tablas que
puedan llegar a tener muchos datos es un factor a tener muy en cuenta.
• TimeStamp: Se utiliza para marcar un registro con la fecha de inserción -
actualización. El tipo timestamp se actualiza automáticamente cada vez
que insertamos o modificamos los datos.
PROGRAMACIÓN DE BASE DE DATOS
24. DECLARE @bit bit, @tinyint tinyint,
@smallint smallint, @int int,
@decimal decimal(10,3),
@money money
set @bit = 1
print @bit
set @tinyint = 255
print @tinyint
set @smallint = 32767
print @smallint
set @int = 642325
print @int
set @decimal = 56565.234
print @decimal
set @money = 12.34
print @money
PROGRAMACIÓNDEBASEDEDATOS DECLARE @char char,
@varchar varchar(255),
@smallDatetime smallDatetime
set @char = ‘x’
print @char
set @varchar = ‘Tecnológigo’
print @varchar
set @smalldatetime = '1998-12-13 12:43:00‘
print @smalldatetime
Ejemplos de datos
tipo numéricos
Ejemplos de datos
tipo carácter y
tipo fecha
25. Proyecto de la unidad: Programación de base de datos (Programación del
lado del servidor)
1: En la BD AlumnosDB que ya tiene en la instancia que tiene instalado el
SQL cear una tabla llamada AlumControl, cuya función es contabilizar el
número de alumnos por carrera. Debe contener los campos:
- Carrera; cadena de 5 caracteres (se admiten solo: IIND, IIA, IGE, ISC,
IIAS, IMEC)
- Total; numérico entero (solo admite números >= 0)
2: Por medio de query generar un registro por carrera con las iniciales de la
carrera y con CERO en el campo Total.
3: Eliminar el contenido de la tabla Alumnos.
PROGRAMACIÓN DE BASE DE DATOS
26. 4: generar los triggers necesarios para llevar a cabo el conteo de alumnos:
- Cuando un registro es agregado a la tabla Alumnos se debe sumar 1 a la
carrera correspondiente en la tabla AlumControl.
- Cuando un registro es eliminado de la tabla Alumnos se debe sumar 1 a la
carrera correspondiente en la tabla AlumControl.
- Cuando un registro es modificado de la tabla Alumnos se debe restar 1 a
la carrera correspondiente en la tabla AlumControl y debe sumar 1 a la
nueva carrera en la tabla AlumControl.
5: Generar una pantalla adicional llamada por un botón, en la GUI que
muestre el contenido de la tabla AlumControl a manera de reporte.
6: Verificar por medio de queries en SQL que el contenido de la tabla
AlumControl es correcto.
PROGRAMACIÓN DE BASE DE DATOS
27. Bibliografía
• Patrick LeBlanc. 2015. Microsoft Visual C# 2013 Step by Step. EE. UU. Octal
Publishing, Inc. ISBN: 978-0-7356-8183-5.
• John Sharp. 2013. Microsoft SQL Server 2012 Step by Step PrePress. EE. UU.
Sevastopol, CA. O’Reilly Media, Inc.
PROGRAMACIÓN DE BASE DE DATOS