Por motivos de trabajo he tenido que ponerme con los triggers, cosa que hace tiempo que no hacía y para aprovechar la ocasión he pensado en hacer un post sobre el tema.
Primero de todo para los que no lo sepan, voy a hacer una breve definición de que es un trigger y para que nos pueden servir.
Qué es?
Un trigger es un proceso que está almacenado en una BD, que se ejecuta automáticamente al cumplirse una de las siguientes condiciones dentro de una tabla:
- Insert
- Update
- Delete
Para que nos sirve?
Los triggers nos sirven, para automatizar procesos dentro de la BD, de esta forma si nosotros por ejemplo, queremos guardar un histórico de elementos borrados de una tabla dentro de otra, solo tenemos que implementar un trigger dentro de dicha tabla.
Ejemplo de Uso:
- CREATE TRIGGER SampleDeleteTrigger --[Nombre del trigger]
- ON Table_1 --[Aquí ponemos el nombre de la tabla ala que queremos que afecte el trigger]
- FOR DELETE --[Aquí el tipo de disparador : Delete,Insert,Update]
- as
- --[Comentarios sobre que hace nuestro trigger]
- --[Aquí declaramos variables]
- Declare @Nombre varchar(200)
- Declare @ID int
- -- Obtenemos el ID del Usuario que se acaba de borrar
- SELECT @ID = (SELECT ID FROM deleted )
- --[From deleted : esto lo explico más abajo con una tabla]
- SELECT @Nombre = (SELECT Nombre FROM deleted)
- INSERT INTO Table_2 VALUES(@ID,@Nombre)
- GO
Sobre el uso de las variables OLD y New dentro de los Triggers:
- Insert
- OLD:
- Aquí no tenemos datos anteriores al insert.
- New:
- Aquí si tenemos, hacemos un select contra Inserted.
- Update
- OLD:
- Aquí si tenemos, para conseguirla tenemos que hacer un select a deleted.
- Ejemplo :
- SELECT @ID = (SELECT ID FROM deleted )
- NEW:
- Aquí si tenemos, para conseguirla tenemos que hacer un select a deleted.
- Ejemplo :
- SELECT @ID = (SELECT ID FROM Inserted )
-
- Delete
- OLD:
- Aquí si tenemos, como el anterior para conseguir el dato borrado:
- Ejemplo:
- SELECT @ID = (SELECT ID FROM deleted )
- NEW:
- Aquí no hay datos nuevos, ya que borramos.
Link de interés:
http://msdn.microsoft.com/es-es/library/ms189799.aspx
Espero que os sea de utilidad.
Quique
14
Evento sobre Localización de aplicaciones [Second Nug]
0 Comments | Posted by quiqu3 in Eventos, SecondNug

El próximo martes 19 de Enero queremos empezar el año pisando fuerte y plantearos una serie de cuestiones importantes: ¿Está tu aplicación preparada para ser localizada? ¿Sabes todo lo que implica localizar una aplicación? ¿Lo tuviste en cuenta cuando la diseñaste? ¿Conoces las diferentes alternativas de las que dispones?
El proceso de localización comprende todas las tareas asociadas al hecho de adaptar nuestro producto a una región o país específico; traducción de textos, formatos de fechas, monedas, unidades, etc. Preparar tu aplicación para que pueda ser localizada no es una cuestión trivial y es importante conocer las implicaciones que este proceso supone y las diferentes alternativas con las que contamos.
En éste evento veremos de forma práctica las principales alternativas de las que disponemos para asegurarnos que nuestra aplicación esté preparada para ser localizada: Culturas, ficheros de recursos, cadenas en base de datos, trabajo con idiomas con caracteres extendidos, etc. ¿Estás preparado?
Texto by Second Nug
Via : #Second Nug#
Registro : #Evento#
No te lo pierdas
Empezaremos explicando que es y para qué sirve la librería Scheduling/Calendar.
Está librería pertenece al paquete de componentes de DevExpress (http://www.devexpress.com/), estas librerías son de pago, hay diferentes tipos de licencias todo esto lo podéis consultar en el siguiente link : http://www.devexpress.com/Support/LicensingFAQ.xml.
Lo que nos permite es crear un calendario para gestionar nuestras tareas/citas, todo esto en nuestra aplicación basada en C#. Nos permite personalizar la estética al puro estilo office y sincronizarlo con Microsoft Outlook, aunque está ultima parte la dejaremos para otro post.
Dentro de las características más destacables, es el uso de “Drag & Drop”. Dentro del calendario podremos mover citas/tareas a nuestro antojo, con tan solo configurar los eventos de modificación para que nos modifique la base de datos.
Es lo bueno del paquete de componentes de DevExpress, nos permite tener aplicaciones muy vistosas y agiles con solo agregar componentes y unas pocas líneas de código (Por algo nos llaman los hijos del “Drag & Drop”).
Bueno empezamos ya con el ejemplo, lo primero que necesitamos es descargar la librería en cuestión : http://www.devexpress.com/Products/NET/Controls/WinForms/Scheduler/
Después de esto ya podemos iniciar el Visual Studio y agregar las referencias, una vez hecho esto creamos un nuevo proyecto.
En mi caso le llamaré: “SampleXtraScheduler “, después de crear el nuevo proyecto ya tenemos el formulario delante.
Lo primero que haremos será agregar al herramienta de “XtraScheduler”, al hacerlo podemos ver que nos añade un calendario al formulario.

Form Principal
Lo siguiente sera agregar un par de barras de herramientas de fecha, que también estan incluidas en la librería, de manera que queda asi:

Después de esto lo que haremos será crear una nueva conexión a Sql Server incluyendo las tablas de Appointments y Resources, al final del post encontrareís, los Create Tables necesarios para el ejemplo.
Una vez creado el “Conection String” vamos a asignar los orígenes de datos al “XtraScheduler”, primero de todo vamos a las propiedades de este, después seleccionamos appointments y en DataSource seleccionamos el Dataset que nos indica la imagen.

Para comprovar que está bien enlazado, lo que haremos será mirar dentro de las propiedades de Appointments, la propiedad mappings, que tiene que quedar como muestra la imagen, en caso contrario es que no hemos realizado bien la conexión con la base de Datos.

Ahora repetiremos los mismos pasos que antes pero en Resources:


Ahora lo que tenemos que hacer es agregar las siguientes lineas de código :
Creamos la función de load:
private void xtraAgenda_Load(object sender, EventArgs e) { this.resourcesTableAdapter.Fill(this.dS_SampleXtraScheduler.Resources); this.appointmentsTableAdapter.Fill(this.dS_SampleXtraScheduler.Appointments); }
Creamos uan función para que guarde el calendiro en caso de que haya modificaciones:
private void schedulerStorage1_AppointmentsChanged(object sender, DevExpress.XtraScheduler.PersistentObjectsEventArgs e) { this.appointmentsTableAdapter.Update(this.dS_SampleXtraScheduler); this.dS_SampleXtraScheduler.AcceptChanges(); }
[Opcional]
SI quereis dar un aspecto a la aplicación tipo Office 2007 solo tenemos que añadir un par lineas de código al main() de Program.cs
1 2 SkinManager.EnableFormSkins();//Nos carga el Skin de la ventana del programa, un estilo a office 2007 Application.EnableVisualStyles();
Ahora solo queda guardar y pulsar F5, ahora podemos ver algo parecido a esta imagen y jugar un poco con el ejemplo.
Os recomiendo pulsar botón derecho en el calendario y usar New Appointment
Espero que os haya gustado la librería XtraScheduler.
[Creates Tables]
CREATE TABLE [dbo].[Appointments] (
[UniqueID] [int] IDENTITY (1, 1) NOT NULL ,
[Type] [int] NULL ,
[StartDate] [smalldatetime] NULL ,
[EndDate] [smalldatetime] NULL ,
[AllDay] [bit] NULL ,
[Subject] [nvarchar] (50) NULL ,
[Location] [nvarchar] (50) NULL ,
[Description] [nvarchar](max) NULL ,
[Status] [int] NULL ,
[Label] [int] NULL ,
[ResourceID] [int] NULL ,
[ReminderInfo] [nvarchar](max) NULL ,
[RecurrenceInfo] [nvarchar](max) NULL ,
[CustomField1] [nvarchar](max) NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
CREATE TABLE [dbo].[Resources] (
[UniqueID] [int] IDENTITY (1, 1) NOT NULL ,
[ResourceID] [int] NOT NULL ,
[ResourceName] [nvarchar] (50) NULL ,
[Color] [int] NULL ,
[Image] [image] NULL ,
[CustomField1] [nvarchar](max) NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
ALTER TABLE [dbo].[Appointments] WITH NOCHECK ADD
CONSTRAINT [PK_Appointments] PRIMARY KEY CLUSTERED
(
[UniqueID]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[Resources] WITH NOCHECK ADD
CONSTRAINT [PK_Resources] PRIMARY KEY CLUSTERED
(
[UniqueID]
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[Appointments] (
[UniqueID] [int] IDENTITY (1, 1) NOT NULL ,
[Type] [int] NULL ,
[StartDate] [smalldatetime] NULL ,
[EndDate] [smalldatetime] NULL ,
[AllDay] [bit] NULL ,
[Subject] [nvarchar] (50) NULL ,
[Location] [nvarchar] (50) NULL ,
[Description] [nvarchar](max) NULL ,
[Status] [int] NULL ,
[Label] [int] NULL ,
[ResourceID] [int] NULL ,
[ReminderInfo] [nvarchar](max) NULL ,
[RecurrenceInfo] [nvarchar](max) NULL ,
[CustomField1] [nvarchar](max) NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
CREATE TABLE [dbo].[Resources] (
[UniqueID] [int] IDENTITY (1, 1) NOT NULL ,
[ResourceID] [int] NOT NULL ,
[ResourceName] [nvarchar] (50) NULL ,
[Color] [int] NULL ,
[Image] [image] NULL ,
[CustomField1] [nvarchar](max) NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
ALTER TABLE [dbo].[Appointments] WITH NOCHECK ADD
CONSTRAINT [PK_Appointments] PRIMARY KEY CLUSTERED
(
[UniqueID]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[Resources] WITH NOCHECK ADD
CONSTRAINT [PK_Resources] PRIMARY KEY CLUSTERED
(
[UniqueID]
) ON [PRIMARY]
GO
Bueno en este post hablaremos de que es y como crear un WebService. Mañana enseñaré a consumir de este WebService. Para empezar la creación utilizaremos el Visual Studio y un servidor ISS local para poder realizar las pruebas. Empezaremos por una breve definición de que es un WebService : Un WebService es un conjunto de protocolos y estándares que sirven para intercambiar datos entre aplicaciones. Distintas aplicaciones de software desarrolladas en lenguajes de programación diferentes, y ejecutadas sobre cualquier plataforma, pueden utilizar los servicios web para intercambiar datos en redes de ordenadores como Internet (Definición extraída de: Wikipedia). Ahora vamos a pasar ya al ejemplo practico, que es donde vamos a ver lo fácil que es crear un WebService.
Primero seleccionaremos Nuevo proyecto :
Nuevo Proyecto
Aquí seleccionaremos aplicación de servicio web ASP.NET, le daremos un nombre a la solución y escogeremos donde guárdala.
Inmediatamente después se nos abrirá la hoja de código que visual studio nos genera:
Nuevo Metodo
El único cambio que vamos a hacer en el código que nos genera de ejemplo, es borrar la función HelloWorld() por una llamada NuevoMetodo(string nombre) a la que tendremos que pasarle un string con el nombre y nos devolverá un saludo en el momento de consumir el WebService.
Aquí teneis el código final de nuestro WebService
using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Linq; using System.Web; using System.Web.Services; using System.Web.Services.Protocols; using System.Xml.Linq; namespace HelloWorld { /// <summary> /// Descripción breve de Service1 /// </summary> [WebService(Namespace = "http://www.qmartinez.es")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [ToolboxItem(false)] // Para permitir que se llame a este servicio web desde un script, usando ASP.NET AJAX, quite la marca de comentario de la línea siguiente. // [System.Web.Script.Services.ScriptService] public class Service1 : System.Web.Services.WebService { [WebMethod] public string NuevoMetodo(string nombre) { return "Te llamas "+nombre; } } } |
Y como habéis podido ver así de fácil es crear un WebService, en el siguiente post enseñaré a consumir de este sencillo WebService, que lo único que hace en este caso es devolver un saludo.
Saludos y espero que haya quedado claro.
Bueno estoy de estreno con www.qmartinez.es, hosting, dominio y blog! y está vez se espera que no sea solo un intento sino algo que duré y ayude a la comunidad de programadores que al final es lo que importa, ayudarnos entre todos. Con este post empiezo a decir que lo voy a llenar, empezaré con un post teórico y uno practico , espero que os guste y como ya diré en los demás post si tenéis alguna consulta sobre el tema que trato o en algún tema que penséis que os puedo ayudar ya sabéis, enviar un mail y os contestaré lo antes posible.



