UNIVERSIDAD ABIERTA PARA ADULTOS
ESCUELA DE INGENIERÍA Y TECNOLOGÍA
PARTICIPANTE
DARLYN GIOMAL FRANCISCO PEÑA
MATRÍCULA
100011821
ASIGNATURA
PROGRAMACION III
TEMA
TRIGGERS O DISPARADORES
FACILITADOR
ING. JOAN MANUEL GREGORIO PEREZ
SANTIAGO DE LOS CABALLEROS,
REPÚBLICA DOMINICANA
16 de Abril de 2024
Investigar en la web acerca de los triggers o disparadores
Los Trigers o Dispardores
Las bases de datos relacionales están diseñadas mediante lenguaje SQL, como
es el caso de MySQL, o PostgreSQL. En ellas, determinadas funciones se
realizan a través de un trigger o disparador.
¿Qué es un Trigger?
Un trigger o disparador es un script que se usa en lenguaje de programación
SQL, en especial en bases de datos como MySQL, o PostgreSQL.
Consiste en una serie de reglas predefinidas que se asocian a una tabla. Estas
reglas se aplican a la base de datos cuando se realizan determinadas
operaciones en la tabla, por ejemplo, al añadir, actualizar o eliminar registros.
Dicho de otra manera, el trigger desencadena determinadas acciones de forma
automática en las tablas de la base de datos cuando se insertan, modifican y se
añaden nuevos datos.
Estos disparadores se llevan usando en MySQL desde la versión 5.0.2., mientras
que PostgreSQL ya los incluyó en el año 1997.
¿Para qué sirve?
La principal función de los trigger es contribuir a mejorar la gestión de la base de
datos. Gracias a ellos muchas operaciones se pueden realizar de forma
automática, sin necesidad de intervención humana, lo que permite ahorrar
mucho tiempo.
Otra de sus funciones es aumentar la seguridad e integridad de la información.
Esto lo consiguen gracias a la programación de restricciones o requerimientos
de verificación que permiten minimizar los errores y sincronizar la información.
Por otra parte, entre sus principales ventajas es que todas estas funciones se
pueden realizar desde la propia base de datos, es decir, no es necesario recurrir
a lenguajes externos de programación.
¿Cuándo se puede usar un Trigger?
Los trigger se puede ejecutar cuando el usuario realizar alguna acción
relacionada con añadir, actualizar o eliminar información de una tabla. Es decir,
al usar los comandos INSERT, UPDATE o DELETE.
Por tanto, para poder usar un trigger es necesario que el usuario posea permisos
INSERT y DELETE e dicha base de datos.
Estructura de un Trigger
La estructura y modo de funcionamiento de un trigger se puede resumir en
tres pasos:
• Se produce una llamada de activación al código que se ha de ejecutar.
• Aplica las restricciones necesarias para poder realizar la acción, por ejemplo,
una determinada condición o una nulidad.
• Una vez verificadas las restricciones, se ejecuta la acción, en base a las
instrucciones recibidas en el primer punto.
Tipos de trigger
Existen diferentes tipos de disparadores, en función de las ejecuciones que
realizan.
Disparadores de fila: también llamados row triggers, son aquellos cuya
ejecución se realiza a través de llamadas desde una tabla asociada al trigger.
Disparadores de secuencia. también llamados statement triggers, son aquellos
que se ejecutan solo una vez, independientemente de la cantidad de veces que
se cumplan las condiciones para su ejecución.
¿Cuándo ejecuta su acción un Trigger?
Los triggers pueden ejecutar su acción en diferentes momentos.
• Antes de ejecutar la sentencia (before statement)
• Después de ejecutar la sentencia y de comprobar las restricciones y condiciones
aplicables (after statement)
• Antes de modificar la fila de la tabla afectada por la sentencia del trigger, y de
comprobar las restricciones y condiciones de ejecución (before row)
• Después de modificar la fila de la tabla afectada por la sentencia del trigger, y de
comprobar las restricciones y condiciones de ejecución (after row)
Características y posibles efectos
Por una parte, aunque los triggers podrían almacenar los datos afectados por las
sentencias en tablas temporales, en principio no aceptan ningún tipo de
argumento o parámetro.
Por otra, no están habilitados para la ejecución de comandos ROLLBACK o
COMMIT, ya que estas forman parte de la sentencia SQL del trigger.
Respecto a sus posibles efectos, hay que tener en cuenta que si se han
programado de forma incorrecta podrían ocasionar mutaciones en las tablas.
Ejemplos de Trigger
Imagina que quieras duplicar una tabla, en la que se añada de forma automática
la información que se vaya insertando en la tabla original. Bien, pues para eso
tan solo tienes que programar un trigger para que se ejecute cada vez que
insertas un dato en la primera tabla, de forma que dicho dato se añadirá de forma
automática en la segunda.
Sin embargo, esto es solo un ejemplo de los muchos usos que puede tener un
trigger.
A efectos prácticos lo podrías programar para casos como los siguientes:
• Crear una copia automatizada que registre cada cliente que entra en un
eCommerce.
• Contabilizar estadísticas sobre accesos a una base de datos y las
acciones que se han llevado a cabo en ellas.
• Duplicar tablas con información sincronizada.
• Programar la base de datos para que se realice un pedido de forma
automática cuando el stock ha legado a un mínimo determinado de
unidades.
• Bloquear la inserción de datos incorrectos o de transacciones inválidas.
• Crear alertas que avisen de cuando se ha modificado algún dato en una
tabla.
Y mucho más. Los triggers tienen numerosas posibilidades, de hecho tienen
tantas que casi se podría automatizar por completo el funcionamiento de una
base de datos.
Trigger marketing
Cabe decir que el concepto de trigger no es exclusivo del entorno de la gestión
de bases de datos. Por ejemplo, también se pueden utilizar en el ámbito del
marketing, especialmente para email marketing.
El trigger marketing o trigger mail consiste en programar el envío de
notificaciones o mensajes personalizados a los clientes. Por ejemplo, puedes
programar el envío de mensajes de felicitación para cada cliente cuando sea su
fecha de cumpleaños. O programar el envío de ofertas relacionadas cuando el
cliente compra un determinado producto.
El concepto en ambos casos es el mismo: desencadenar una acción cuando se
dan las condiciones para su ejecución, ya sea añadir, modificar o eliminar datos
o, en el caso del marketing, que el cliente haya realizado determinada acción en
la tienda online.
En definitiva, los trigger funcionan como scripts que permiten automatizar tareas
y, de esta forma, agilizar la gestión de las bases de datos, aumentando además
la seguridad y la integridad de la información y reduciendo la entrada de datos
incorrectos
Elabora un formulario para una tabla X, que inserte y acutualice los
registros utilizando procedimiento almacenado desde el lenguaje de
programación que estes utilizando en la asignatura.
DISEÑO DEL FORMULARIO
EVIDENCIA CODIGO DE NUESTRO FORMULARIO
CODIGO DE NUESTRO FORMULARIO
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace TAREA_6_PRO_III
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnGuardar_Click(object sender, EventArgs e)
{
ClaOrigen origen= new ClaOrigen();
origen.Id_origen = int.Parse (txtCodigo.Text);
origen.NombreOrigen = txtOrigen.Text;
origen.EstatusOrigen= cmbEstatus.Text;
ClaDatos datos= new ClaDatos();
datos.guardarOrigen(origen);
MessageBox.Show("Registro Guardado correctamente");
txtCodigo.Text = "";
txtOrigen.Text = "";
cmbEstatus.Text = "";
}
}
}
EVIDENCIA DE CODIGO DE LA CLASE CLADATOS
CODIGO DE LA CLASE CLADATOS
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TAREA_6_PRO_III
{
public class ClaDatos
{
SqlConnection con = new SqlConnection("Data Source=DESKTOP-
TFCUIRU;Initial Catalog= TAREA 6;Integrated Security=True;");
public DataTable consulta(string strSql)
{
DataTable tabla = new DataTable();
SqlDataAdapter da = new SqlDataAdapter(strSql, con);
da.Fill(tabla);
return tabla;
}
public void guardarOrigen(ClaOrigen Origen)
{
string strSql = "sp_registrar_origenes";
SqlCommand cmd = new SqlCommand(strSql, con);
con.Open();
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@ID_Origen", Origen.Id_origen);
cmd.Parameters.AddWithValue("@NombreOrigen",
Origen.NombreOrigen);
cmd.Parameters.AddWithValue("@EstatusOrigen",
Origen.EstatusOrigen);
cmd.ExecuteNonQuery();
con.Close();
}
}
}
EVIDENCIA DEL CODIGO DE LA CLASE CLAORIGEN
CODIGO DE LA CLASE CLAORIGEN
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TAREA_6_PRO_III
{
public class ClaOrigen
{ public int Id_origen { get; set; }
public string NombreOrigen { get; set; }
public string EstatusOrigen { get; set; }
}
}
EVIDENCIA DE LA BASE DE DATOS UTILIZADA
EVIDENCIA DE EL PROCEDIMIENTO ALMACENADO UTILIZADO
CODIGO DEL PROCEDIMIENTO ALMACENADO UTILIZADO
USE [TAREA 6]
GO
/****** Object: StoredProcedure [dbo].[sp_registrar_origenes] Script Date:
03/04/2024 21:29:40 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Darlyn Francisco>
-- Create date: <03/04/2024>
-- Description: <TAREA 6 DE PROGRAMACION III>
-- =============================================
ALTER PROCEDURE [dbo].[sp_registrar_origenes]
-- Add the parameters for the stored procedure here
@ID_Origen int,
@NombreOrigen Varchar(20),
@EstatusOrigen Varchar(1)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
IF EXISTS (SELECT * FROM Datos WHERE ID_Origen = @ID_Origen)
BEGIN
UPDATE Datos SET NombreOrigen = @NombreOrigen, EstatusOrigen =
@EstatusOrigen
WHERE ID_Origen = @ID_Origen;
END
ELSE
BEGIN
INSERT INTO Datos (NombreOrigen, EstatusOrigen) VALUES (@NombreOrigen,
@EstatusOrigen);
END
END
**VIDEO DEMOSTRATIVO DE LA FUNCIONALIDAD DEL PROGRAMA**
https://drive.google.com/file/d/1Ez7Qz9Ii25MJExKotTJ0btDjAAtYpWe_/vie
w?usp=sharing
Desarrolla una interfaz que al momento de registrar un producto, un
triggers almacene en una tabla llamada historial, la hora, el usuario y la
fecha.
DISEÑO DEL FORMULARIO
EVIDENCIA DEL CODIGO DEL FORMULARIO
CODIGO DE NUESTRAS TABLAS
1
CREATE TABLE Productos (
ID INT PRIMARY KEY IDENTITY,
Nombre NVARCHAR(100),
Precio MONEY
2
CREATE TABLE Historial (
ID INT PRIMARY KEY IDENTITY,
ProductoID INT,
NombreProducto NVARCHAR(100),
FechaHora DATETIME,
Usuario NVARCHAR(100)
CODIGO DEL FORMULARIO
namespace TAREA_9
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Producto producto = new Producto();
producto.Nombre = txtNombre.Text;
int precio;
if (int.TryParse(txtPrecio.Text, out precio))
{
producto.Precio = precio;
int result =
ProductoDAL.AgregarProducto(producto);
if (result > 0)
{
MessageBox.Show("Éxito al guardar");
}
else
{
MessageBox.Show("Error al guardar");
}
}
else
{
MessageBox.Show("El precio debe ser un número
entero.");
}
}
}
}
Evidencia de la clase Utilizada
CODIGO DE LA CLASE UTILIZADA
namespace TAREA_9
{
public class ProductoDAL
{
public static int AgregarProducto(Producto producto)
{
int retorna = 0;
using (SqlConnection conexion =
BDNUEVE.ObtenerConexion())
{
string query = "INSERT INTO Productos
(Nombre, Precio) VALUES ('" + producto.Nombre + "', " +
producto.Precio + ")";
SqlCommand comando = new SqlCommand(query,
conexion);
retorna = comando.ExecuteNonQuery();
}
return retorna;
}
}
}
EVIDENCIA DE LACLASE UTILIZADA
CODIGO DE LA CLASE UTILIZADA
namespace TAREA_9
{
public class Producto
{
public int Id { get; set; }
public string Nombre { get; set; }
public int Precio { get; set; }
public Producto() { }
public Producto(int id, string nombre, int precio)
{
this.Id = id;
this.Nombre = nombre;
this.Precio = precio;
}
}
}
EVIDENIA DE LA CLASE DE CONEXION
CODIGO DE LA CLASE DE CONEXION
namespace TAREA_9
{
public class BDNUEVE
{
public static SqlConnection ObtenerConexion()
{
SqlConnection conexion = new
SqlConnection("Integrated Security = SSPI; Persist Security Info
= False; Initial Catalog = NUEVE; Data Source =DESKTOP-
TFCUIRU");
conexion.Open();
return conexion;
}
}
}
BASES DE DAOS UTILIZADA LLAMADA NUEVE
CODIGO DE LA CREACION DE LAS TABLAS: PRODUCTOS E
HISTORIAL
CREATE TABLE Productos (
ID INT PRIMARY KEY IDENTITY,
Nombre NVARCHAR(100),
Precio MONEY
CREATE TABLE Historial (
ID INT PRIMARY KEY IDENTITY,
ProductoID INT,
NombreProducto NVARCHAR(100),
FechaHora DATETIME,
Usuario NVARCHAR(100)
CODIGO DEL TRIGGER UTILIZADO
USE NUEVE
GO
CREATE TRIGGER trg_AfterInsert_Productos
ON Productos
AFTER INSERT
AS
BEGIN
DECLARE @ProductoID INT;
DECLARE @NombreProducto NVARCHAR(100);
DECLARE @FechaHora DATETIME;
DECLARE @Usuario NVARCHAR(100);
SELECT @ProductoID = ID,
@NombreProducto = Nombre,
@FechaHora = GETDATE(),
@Usuario = CURRENT_USER
FROM inserted;
INSERT INTO Historial (ProductoID, NombreProducto,
FechaHora, Usuario)
VALUES (@ProductoID, @NombreProducto, @FechaHora, @Usuario);
END;
CREATE TABLE Historial (
ID INT PRIMARY KEY IDENTITY,
ProductoID INT,
NombreProducto NVARCHAR(100),
FechaHora DATETIME,
Usuario NVARCHAR(100)
DISEÑO DE LA TABLA HISTORIAL
DISEÑO DE LA TABLA PRODUCTO
***VIDEO DEMOSTRATIVO DE LA FUNCIONALIDAD EL PROGRAMA***
https://drive.google.com/file/d/16opFawo0UqbpFqyDql-
QojIUWSix0YjP/view?usp=sharing
NOTA
PARA EL PUNTO 1 DECIDI USAR EL MISMO PROYECTO DE LA TAREA 7
QUE HICE, YA QUE PRACTICAMENTE PIDE LO MISMO