miércoles, 27 de febrero de 2013

Creando un Portal Web usando WebPart



1.      Crear un nuevo web Site  llamado MiPortal

2.      En la página de Default.aspx crear una tabla con la estructura 2 Filas 3 Columnas









3.      Mezclar las 2 primeras celdas en una sola de esta forma y Agregar una Etiqueta de “Bienvenido a Mi Portal”  y darle formato


Bienvenido a Mi Portal








4.      Agregar el WebPart Manager.   Este control será el encargado de administrar el estado y el comportamiento del resto de web parts que incluyamos.  Es un control no visible. Debe estar en la primera parte antes de cualquier otro control de webparts.

5.      En la segunda fila,  vamos a agregar un control para cada celda y lo renombraremos.

1.     <asp:CatalogZone ID="LaZonaCatalogo"
2.     <asp:WebPartZone ID="ZonaContenido”
3.           <asp:WebPartZone ID="ZonaInformacion”


6.      En la Zona de Informacion vamos agregar y luego ejecutar nuestro proyecto
a.       DropDownList  lo llamaremos cbRegiones  y agregaremos valores de Departamentos.
b.      Control Calendar
c.       AdRotator

7.      En la zona de Contenido crearemos 2 controles de usuario con datagrid y luego los agregaremos a esta Zona.  Usar BD Northwind.

8.      En la segunda Celda  de la primera fila agregaremos un control de Menú lo llamaremos MenuModos,  lo rellenaremos con las modalidades disponibles para “Display” nuestro portal.
En las que encontramos: 
·         Browse  por Defecto  la de visualización
·         Catalog  para definir las zonas utilizando el Catalogzone
·         Design  para definir las webpart gráficamente “Drag a Drop”

9.      Rellenamos el Menu:

VB.NET
Dim rootItem As New MenuItem("Seleccionar Modo")

        For Each mode As WebPartDisplayMode In WebPartManager1.DisplayModes
            If mode.IsEnabled(WebPartManager1) Then
                rootItem.ChildItems.Add(New MenuItem(mode.Name))
            End If
        Next
        MenuModos.Items.Add(rootItem)
 
C#
   MenuItem rootItem = new MenuItem("Seleccionar Modo");

            foreach (WebPartDisplayMode mode in WebPartManager1.DisplayModes)
            {
                if (mode.IsEnabled(WebPartManager1))
                    rootItem.ChildItems.Add(new MenuItem(mode.Name));
            }
            MenuModos.Items.Add(rootItem);



10.   En el evento clik del menú  agregaremos una sentencia para asignarle al WebPartManager el modo seleccionado.

VB.NET
    For Each mode As WebPartDisplayMode In WebPartManager1.DisplayModes
            If mode.Name = e.Item.Text AndAlso mode.IsEnabled(WebPartManager1) Then
                WebPartManager1.DisplayMode = mode 
                Exit For
            End If
   Next

C#
foreach (WebPartDisplayMode mode in WebPartManager1.DisplayModes)
        {
            if (mode.Name == e.Item.Text && mode.IsEnabled(WebPartManager1))
            {
                WebPartManager1.DisplayMode = mode;
                break;
            }
        }

viernes, 22 de febrero de 2013

Gestion de Tablas Particionadas



Un desafío para un diseñador de base de datos es diseñar sistemas que sean mantenibles, escalables y que tengan un buen desempeño.
Aunque el objetivo suena obvio,  algunas veces es difícil de lograr.
Una técnica  usada para intentar lograr un balance razonable entre  mantenimiento y escalabilidad vs. Desempeño  es las Tablas Particionadas.
 Esto no es nuevo, fue un cambio significante en SQL Server 2005 y continua en SQL Server 2008 proveyendo herramientas para ayudar a los desarrolladores a lograr esta tarea.
TablasParticionadas

¿Por qué particionar?
El particionamiento divide grandes cantidades de datos en pequeños y más manejables sets.
¿Como ayuda?
 Modificar y buscar datos en un conjunto más pequeño es más fácil y rápido que trabajar con un gran set de datos.
Por ejemplo: Buscar  una factura por una fecha dada es más eficiente cuando buscamos en un archivador organizado.  Lo mismo sucede cuando buscamos en las tablas.
Beneficios:
Más rápido y eficiente acceso a datos.
El desempeño incrementa para operaciones en paralelo con servidores multiprocesadores,  cada procesador puede acceder a multiples particiones simultáneamente.
Nota:
Particionamiento de tablas e índices solo está disponible en SQL Server 2008 Enterprise, Developer y Ediciones de Evaluacion.
Terminos a Considerar
Partition Key:  Una columna en una Tabla determina a cual partición los datos residirán
Partition Function :  Una función que especifica que datos iran a que partición definidos por el Partition Key.
Partition Schema: Mapea una partición a un Filegroups.


Limites LEFT y RIGHT
Una función para 4 particiones:
Aquí lo que significa:

-- Crear una funcion de particion
CREATE PARTITION FUNCTION VentasxQuarterPF(datetime)
AS RANGE RIGHT
FOR VALUES ('19960101', '19960401', '19960701', '19961001')
GO
-- Filegroup para ventas < 01/01/1996
ALTER DATABASE Demo
ADD FILEGROUP Ventas1995Q4FG
GO

-- -- Filegroup para ventas >= 01/01/1996 AND <= 03/31/1996
ALTER DATABASE Demo
ADD FILEGROUP Ventas1996Q1FG
GO

-- Filegroup para ventas >= 04/01/1996 AND <= 06/30/1996
ALTER DATABASE Demo
ADD FILEGROUP Ventas1996Q2FG
GO

-- Filegroup para ventas >= 07/01/1996 AND <= 09/30/1996
ALTER DATABASE Demo
ADD FILEGROUP Ventas1996Q3FG
GO

-- Filegroup para ventas >= 10/01/1996 AND <= 12/31/1996
ALTER DATABASE Demo
ADD FILEGROUP Ventas1996Q4FG
GO

-- Para futuro crecimiento, adicionar un Filegroup
ALTER DATABASE Demo
ADD FILEGROUP Ventas1997Q1FG
GO


Creando archivos para los FileGroup

-- Ventas2002Q4FG filegroup
ALTER DATABASE Demo
ADD FILE(NAME = Ventas1995Q4,
    FILENAME = 'C:\SQL Server\Ventas1995Q4.ndf')
TO FILEGROUP Ventas1995Q4FG
GO

-- Ventas1996Q1FG filegroup
ALTER DATABASE Demo
ADD FILE(NAME = Ventas1996Q1,
    FILENAME = 'C:\SQL Server\Ventas1996Q1.ndf')
TO FILEGROUP Ventas1996Q1FG
GO

-- Ventas1996Q2FG filegroup
ALTER DATABASE Demo
ADD FILE(NAME = Ventas1996Q2,
    FILENAME = 'C:\SQL Server\Ventas1996Q2.ndf')
TO FILEGROUP Ventas1996Q2FG
GO

-- Ventas1996Q3FG filegroup
ALTER DATABASE Demo
ADD FILE(NAME = Ventas1996Q3,
    FILENAME = 'C:\SQL Server\Ventas1996Q3.ndf')
TO FILEGROUP Ventas1996Q3FG
GO

-- Ventas1996Q4FG filegroup
ALTER DATABASE Demo
ADD FILE(NAME = Ventas1996Q4,
    FILENAME = 'C:\SQL Server\Ventas1996Q4.ndf')
TO FILEGROUP Ventas1996Q4FG
GO

--  filegroup adicional
ALTER DATABASE Demo
ADD FILE(NAME = Ventas1997Q1,
    FILENAME = 'C:\SQL Server\Ventas2004Q1.ndf')
TO FILEGROUP Ventas1997Q1FG
GO



-- Crear un partition scheme usando un file group diferente para cada particion
-- NOTE: Ventas1997Q1FG es una particion extra.  SQL la marcara como NEXT used

CREATE PARTITION SCHEME VentasxQuarterPS
AS PARTITION VentasxQuarterPF
TO (Ventas1995Q4FG, Ventas1996Q1FG, Ventas1996Q2FG,
    Ventas1996Q3FG, Ventas1996Q4FG, Ventas1997Q1FG)
GO


Crear la tabla donde se utilizara las particiones
CREATE TABLE FacturasPT(
       [Codigo_Pedido] [int] NOT NULL,
       [Codigo_Cliente] [varchar](20) NULL,
       [Fecha] [datetime] NULL,
       [Origen] [varchar](50) NULL,
       [Descripcion] [varchar](max) NULL,
       [Total] [money] NOT NULL)
       ON VentasxQuarterPS(Fecha)
      
      
            
       INSERT INTO FacturasPT
       SELECT p.Codigo_Pedido, p.Codigo_Cliente, p.Fecha, p.Origen, p.Descripcion, p.Total
         FROM Pedidos p
      
SET STATISTICS IO ON

SELECT * FROM FacturasPT p
SELECT p.Codigo_Cliente, p.Total, p.Descripcion FROM Pedidos p


----  INFORMACION DE LA PARTICION
SELECT
  $PARTITION.VentasxQuarterPF(Fecha) AS Partition,
  COUNT(*) AS NumeroVentas
FROM FacturasPT
GROUP BY $PARTITION.VentasxQuarterPF(Fecha)
ORDER BY PARTITION


SELECT DISTINCT Fecha,
    $PARTITION.VentasxQuarterPF(Fecha) AS Partition
FROM FacturasPT
WHERE Fecha IN('19960115', '19960627',
    '19960817', '19971105')
ORDER BY Fecha



SELECT name, data_space_id, type, function_id
FROM sys.partition_schemes

-- Diplay information about partition filegroups
SELECT name, data_space_id, type
FROM sys.data_spaces