Editor WYSIWYG para ASP.NET

Que tal muchos de nosotros nos dedicamos al desarrollo web y a veces los clientes nos piden que actualizemos los contenidos del sitio web, para esto es sumamente recomendable que utilizemos algún editor WYSIWYG (What You See Is What You Get).

En ASP.NET podemos integrar el editor FCKeditor el cual desde su página podemos descargar el control de servidor y registrarlo dentro de nuestra página ASP.NET.

URL: http://ckeditor.com/download

1.- Descomprimir el archivo de .NET, navegamos dentro de la carpeta Bin 2.0 encontraremos la .dll llamada FredCK.FCKeditorV2.dll , en donde la agregaremos como referencia dentro de nuestro proyecto.

fckeditorASPNET_02

2.- Descargamos también los archivos completos del FCKeditor y los descomprimimos dentro de nuestra carpeta del sitio web. (Es recomendable que nuestro sitio web esté hospedado dentro de un servidor IIS).

3.- Ahora nos toca registrar el control de servidor para que podamos utilizarlo dentro de nuestas página web con la directiva @Register colocando el Assembly, NameSpace y nuestro TagPrefix personalizado, de la siguiente forma:

<%@ Page Language="C#" AutoEventWireup="true"  
CodeFile="Default.aspx.cs" Inherits="_Default" %>

<%@ Register Assembly="FredCK.FCKeditorV2" 
Namespace="FredCK.FCKeditorV2" TagPrefix="Editor" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">   
    <Editor:FCKeditor ID="Editor" runat="server"></Editor:FCKeditor>
    </form>
</body>
</html>

fckeditorASPNET_01

En esta ocasión mostraremos como manipular archivos .txt para leer y escribir desde el FCKeditor.

4.- Agregamos una clase llamada Archivo.cs: Necesitamos agregar el espacio de nombres System.IO

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace iEduSoft
{
   public class Archivo
    {
       public static string LeerTXT(string rutaArchivo)
       {
           string contenido="";
           using(StreamReader lector = File.OpenText(rutaArchivo))
           {
               contenido = lector.ReadToEnd();
               contenido = contenido.Replace(Environment.NewLine, "<br>");
           }
           return contenido;
       }

       public static void EscribirTXT(string rutaArchivo,string contenido)
       {
           using (StreamWriter escritor = File.CreateText(rutaArchivo))
           {
               escritor.Write(contenido);
           }
       }
    }
}

En esta clase tenemos dos métodos uno para leer archivos .txt y el otro para sobreescribir o escribir texto en ellos.

5.- Agregamos un botón de Actualizar.

fckeditorASPNET_03

6.- Dentro del evento Page Load podemos agregar nuestro método de lectura de archivo y dentro del evento click del botón el de escritura.

public partial class _Default : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            Editor.Value = Archivo.LeerTXT(Server.MapPath("Documentos/Post1.txt"));
        }
    }
    protected void btnActualizar_Click(object sender, EventArgs e)
    {
       Archivo.EscribirTXT(Server.MapPath("Documentos/Post1.txt"), Editor.Value);
    }
  
}

7.- Corremos la aplicación, y listo tenemos un editor online para nuestros sitios web ASP.NET.

Si lo vinculamos a alguna base de datos es mucho más fácil.

fckeditorASPNET_04

Saludos.

Edison Daniel García Chiñas

Como obtener las bases de datos de una instancia SQL Server en ASP.NET

En la clase Connection existe una implementación del método GetSchema() que nos permite obtener información acerca de la base de datos en el que estamos actualmente conectados y si nosotros mandamos a llamar ese método nos regresará un DataTable con la información solicitada.

Dentro de los parametros que le podamos pasar a este método, se encuentra  “Databases” para obtener las bases de datos que están dentro de la instancia actual. Veamos el ejemplo:

Código C#:

 public static DataTable GetDataBases()
    {
         SqlConnection connection = new SqlConnection(ConnectionString);
         DataTable dtDataBases = new DataTable();
        try
        {
            connection.Open();
            dtDataBases = connection.GetSchema("Databases");
        }
        catch (SqlException ex)
        {
            throw ex;
            
        }
        finally
        {
            connection.Close();
        }
        return dtDataBases;
    }

Diseño: DropdownList

GetDatabases-SQLSERVER-01

Código ASP.NET

        ddDataBases.DataSource = GetDataBases();
        ddDataBases.DataTextField = "database_name";
        ddDataBases.DataValueField = "database_name";
        ddDataBases.DataBind();

Preview:

GetDatabases-SQLSERVER-02

Edison Daniel García Chiñas

Microsoft Student Partner | Microsoft México

Manejar archivos CSV y cargarlos a un GridView en ASP.NET

En este post se mostró como manipular los datos desde un archivo csv y guardarlo en tablas en SQL Server 2005:

http://geeks.ms/blogs/mredison/archive/2009/04/08/tip-manejo-de-archivos-csv-con-sql-server.aspx

Pero este post simplemente se basa en cargar un archivo a un directorio dentro del proyecto web, leer dicho archivo y mostrar los datos en una regilla de datos (GridView) sin hacer uso del servidor de base de datos.

El formulario que se ocupará tendrá estos controles web:

  • Un control FileUpload.
  • Dos botones de comando.
  • Dos labels
  • Un gridView

CsvFilesUpload_01

HTML:

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server" method="post">
    <div>
    
        <asp:FileUpload ID="FileUpload1" runat="server" />
        <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Subir" />
    
        <asp:Button ID="Button2" runat="server" Text="Cargar Datos-Tabla" 
            onclick="Button2_Click" />
    
    </div>
    <asp:Label ID="lblOculto" runat="server" Text="" Visible="false"></asp:Label>
    <br />
    <asp:Label ID="Label1" runat="server" Text=""></asp:Label>
    <asp:GridView ID="GridView1" runat="server" Height="251px" Width="420px">
    </asp:GridView>
    </form>
</body>
</html>

 

Código:

En Default.aspx.cs crearemos estos métodos.

 private DataTable CrearTabla(String fila)
    {
        int cantidadColumnas;
        DataTable tabla = new DataTable("Datos");
        String[] valores = fila.Split(new char[] { ',' });
        cantidadColumnas = valores.Length;
        int idx = 0;
        foreach (String val in valores)
        {
            String nombreColumna = String.Format("{0}", idx++);
            tabla.Columns.Add(nombreColumna, Type.GetType("System.String"));
        }
        return tabla;
    }

 

En este primer método se creará la tabla de acuerdo a la cantidad de columnas que se obtengan y que se hayan guardado en un arreglo de tipo string.

Posteriormente crearemos el método AgregarFila:

private DataRow AgregarFila(String fila, DataTable tabla)
    {
        int cantidadColumnas = 100;
        String[] valores = fila.Split(new char[] { ',' });
        Int32 numeroTotalValores = valores.Length;
        if (numeroTotalValores > cantidadColumnas)
        {
            Int32 diferencia = numeroTotalValores - cantidadColumnas;
            for (Int32 i = 0; i < diferencia; i++)
            {

                String nombreColumna = String.Format("{0}", (cantidadColumnas + i));
                tabla.Columns.Add(nombreColumna, Type.GetType("System.String"));
            }
            cantidadColumnas = numeroTotalValores;
        }
        int idx = 0;
        DataRow dfila = tabla.NewRow();
        foreach (String val in valores)
        {
            String nombreColumna = String.Format("{0}", idx++);
            dfila[nombreColumna] = val.Trim();
        }
        tabla.Rows.Add(dfila);
        return dfila;
    }

Método CargarDatos:

Teniendo listos los primeros dos métodos de crearTabla y agregarFilas a la tabla, procedemos a cargar los datos mediante una ruta como parametro:

 private void CargarDatos(string strm)
    {
        DataTable tabla = null;
        StreamReader lector = new StreamReader(strm);
        String fila = String.Empty;
        Int32 cantidad = 0;
        do
        {
            fila = lector.ReadLine();
            if (fila == null)
            {
                break;
            }
            if (0 == cantidad++)
            {
                tabla = this.CrearTabla(fila);
            }
            this.AgregarFila(fila, tabla);
        } while (true);

        GridView1.DataSource = tabla;
        GridView1.DataBind();
    }

Este método checa si existen datos en el archivo,  crea la tabla y agrega las filas a dicha tabla, además de mostrarlos en el GridView.

Carga de Archivos con FileUpload:

Haremos un método de tipo bool, que determinará que tipo de archivo solo quiero que suba el usuario.

 bool ChecarExtension(string fileName)
    {
        string ext = Path.GetExtension(fileName);
        switch (ext.ToLower())
        {
            case ".csv":
                return true;
            default:
                return false;
        }
    }

Posteriormente en el botón de Subir, agregaremos el siguiente código:

public void Button1_Click(object sender, EventArgs e)
    {
        
        
        if (FileUpload1.HasFile)
        {
            if (ChecarExtension(FileUpload1.FileName))
            {
                FileUpload1.SaveAs( MapPath("Archivos/" + FileUpload1.FileName));
                

                 Label1.Text =FileUpload1.FileName +" cargado exitosamente";

                 lblOculto.Text = MapPath("Archivos/" + FileUpload1.FileName);
            }
        }
        else
        {
            Label1.Text = "Error al subir el archivo o no es el tipo .CSV"; 
        }

    }

 

En esta parte indicamos en que directorio se colocará dicho archivo y obtenemos la ruta que posteriormente pasaremos como parametro al método CargarDatos(); a continuación:

 

CsvFilesUpload_02

protected void Button2_Click(object sender, EventArgs e)
    {
        try
        {

            CargarDatos(lblOculto.Text);
        }
        catch
        {
            Response.Write("Ocurrió un error debe cargar antes el archivo");
        }
    }

CsvFilesUpload_03

 

Descarga el archivo de código: CSV.zip-download

Entrenamiento de apoyo para el examen de certificación 70-536 TS: Microsoft .NET Framework Application Development Foundation

MVP Miguel Muñoz, director de la comunidad de desarrolladores de Puebla en México, nos comparte un entrenamiento completo de apoyo para el 70-536. Aprovéchenlo. Saludos.

Para desarrolladores avanzados
Introducción al desarrollo de aplicaciones Microsoft .NET utilizando Visual Studio 2008 (Para principiantes.)

Tip: Manejo de Archivos CSV con SQL Server

Wikipedia:

Los ficheros CSV (del inglés comma-separated values) son un tipo de documento sencillo para representar datos en forma de tabla, en las que las columnas se separan por comas (o punto y coma en donde la coma es el separador decimal: España, Francia, Italia…) y las filas por saltos de línea. Los campos que contengan una coma, un salto de línea o una comilla doble deben ser encerrados entre comillas dobles.

El formato CSV es muy sencillo y no indica un juego de caracteres concreto, ni cómo van situados los bytes, ni el formato para el salto de línea. Estos puntos deben indicarse muchas veces al abrir el fichero, por ejemplo, con una hoja de cálculo.

Fuente: http://es.wikipedia.org/wiki/CSV

¿Cómo sacar provecho de este tipo de archivos en SQL Server?

CREATE DATABASE ESCUELA
USE  ESCUELA

CREATE TABLE ALUMNOS(
    NOCONTROL INT NOT NULL,
    NOMBRE VARCHAR(50) NOT NULL,
    SEMESTRE INT
)
ALTER TABLE ALUMNOS ADD CONSTRAINT PK_ALUMNOS PRIMARY KEY(NOCONTROL)

Tenemos este ejemplo muy sencillo de una tabla Alumnos.
 
Ahora vamos a utilizar un archivo CSV, pueden crearlo desde notepad o Microsoft Excel y guardarlo como .csv, en este caso puede utilizar comas para separar entre campos.
 
ARCHIVOSCVS
BULK INSERT ALUMNOS 
    FROM 'c:Alumnos.csv' 
    WITH 
    ( 
        FIRSTROW = 1, 
        MAXERRORS = 0, 
        FIELDTERMINATOR = ',', 
        ROWTERMINATOR = 'n' 
    )
    

Ahora ocuparemos una sentencia T-SQL llamada BULK INSERT con este comando puedes importar algun documento a sql server desde un txt, xml, etc. y agregar registros a la tabla correspondiente.
 
Damos un select a la tabla alumnos.
 
ARCHIVOSCVS2

Muy práctico para agregar registros a una tabla desde script.

Saludos.

Edison Daniel García Chiñas  | Microsoft Student Partner

Microsoft Data Access Application Block

Son pequeñas clases que nos ayudan mucho a los desarrolladores, en este caso para manipular los datos desde código, existe un archivo llamado SQLHelper que contiene métodos reutilizables para llamar procedimientos almacenados y comandos SQL en forma de texto.

Les recomiendo que lo descarguen y lo utilizen para sus proyectos.

URL: http://www.microsoft.com/downloads/details.aspx?FamilyID=f63d1f0a-9877-4a7b-88ec-0426b48df275&displaylang=en

Servidor Web HTTP, FTP, HTTPs en Windows Server 2008

Como instalar un servidor HTTP en Windows Server 2008:

1.- Vaya a Inicio – Server Manager

InstallIIS01

2.-Vaya a Roles y de agregar un Rol o función

InstallIIS02

3.- Escoga de la lista la función Web Server (IIS) y de clic en siguiente:

InstallIIS03 

4.-Active todas las casillas.

InstallIIS04

5.- Una vez seleccionadas de clic en Instalar.

InstallIIS05 

InstallIIS06

6.- Active el servicio de FTP Publising para utilizarlo más adelante.

InstallIIS07

7.- Abra un explorador Web y teclee http://localhost

InstallIIS07-1

8.- Cree una carpeta para colocar su sitio web, puede eliminar los archivos iistart y welcome.

InstallIIS07-2

9.- Cheque en C:/inetpub/  existen dos carpetas wwwroot y ftproot.

InstallIIS07-3

10.-El siguiente paso es ir a IIS 7, existen dos formas, una es por medio de las Herramientas Administrativas – IIS y la otra en ejecutar colocamos el comando inetmgr.exe

InstallIIS08

11.-Estando en IIS7, vamos agregar un nuevo sitio web y apuntando a la carpeta que creo anteriormente, recuerdo asignar la ip, puede ser la de su computadora en modo privada para forma local, o una ip pública.

InstallIIS09

12.- Coloque los archivos de su sitio web en la carpeta, en este caso haré un index.htm de prueba.

InstallIIS10

13.- Vaya a http://localhost si no asigno ninguna ip anteriormente o a http://direccionIp

InstallIIS11

 

Como instalar un servidor FTP

1.- Primer paso entrar al IIS 7 e ir a la opción FTP Sites. Abrir el Internet Information Services 6.0.

InstallIIS12

2.- Agregar un nuevo Sitio FTP.

InstallIIS13

3.- Colocar una descripción

InstallIIS14

4.- Asignar alguna dirección IP y el puerto 21.

InstallIIS15

5.- Dar en Do not isolate users.

InstallIIS16

6.- Apuntar a la carpeta c:inetpubftproot

InstallIIS17

7.- Agregar algunos archivos a esa carpeta y checarlo en el IIS.

InstallIIS18

8.- Cheque tecleando ftp://direccionIP

InstallIIS19

9.- Es recomendable agregar cuenta de tipo Everyone para que puedan acceder al servidor ftp.

InstallIIS20

También es importante en el windows Firewall, tener activado la excepción de FTP Server.

InstallIIS21

10.- Si se requiere ver en internet con el modem de Infinitum puedes hacer entrando a la configuración y agregando el servicio de servidor FTP a la computadora, este te dará una dirección ip pública el cual le tendrás que asignar con los pasos anteriores.

InstallIIS22 

Como instalar un servidor HTTPs

1.- Vaya al servidor IIS y de clic en Server Certifications

InstallIIS23

2.- Agregue un certificado, dando clic en Create Self-Signed Certificate

InstallIIS24

3.- Vaya a su sitio web y seleccione la opción Bindings.

InstallIIS25

4.- De agregar y seleccione tipo https, la ip y el puerto 443, y el certificado creado.

InstallIIS25-1

5.- Una vez hecho eso, tendrá algo de esta forma:

InstallIIS26

 

6.- Vaya a un explorador web y teclee https://direccionIp

Verá algo como esto:

InstallIIS27

7.- Clic en continuar.

InstallIIS28

 

NOTA: Para Windows Vista se instala el IIS en Activar o Quitar Características de Windows.

Importante, para las versiones Windows Vista Business, Ultimate, se puede activar la casilla de Servidor FTP, para las versiones Home, HomePremium solo el Web Server, y enWindows Vista Basic no soporta ASP.NET.

De igual modo se hacen los pasos para Windows Vista.

Saludos, cualquier pregunta por este medio.

LINQ To SQL Classes Sample

Hola, he preparado un pequeño ejemplo muy sencillo, tal vez para aquellos que aún estén aprendiendo LINQ y SQL Server, este ejemplo se basa en como manejar datos con LINQ conectándose a un servidor de base de datos como SQLEXPRESS y a una base de datos de control de Alumnos, si quieren crear la tabla desde cero, aquí les dejo el script:

USE bdTecMina
GO
CREATE TABLE Alumnos
(
    AlumnoID nvarchar(10),
    Nombre     nvarchar(40),
    Semestre nvarchar(3),
    CONSTRAINT "PK_Alumnos" PRIMARY KEY CLUSTERED(AlumnoID),
)

INSERT INTO Alumnos VALUES('05231104','Edison García','7')
INSERT INTO Alumnos VALUES('05231106','Abraham Gomez García','9')
INSERT INTO Alumnos VALUES('05231108','Alejandre Carvajal','7')
INSERT INTO Alumnos VALUES('06231110','Luis Armando','10')

Ahora necesitaremos crear un Procedimiento Almacenado llamado InsertarAlumno:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE dbo.InsertarAlumno
(
    @AlumnoID nchar(5),
    @Nombre      nvarchar(40),
    @Semestre nchar(3)
)
AS
    INSERT INTO Alumnos
    (
        AlumnoID,    
        Nombre,
        Semestre
    )
    VALUES
    (
        @AlumnoID,
        @Nombre,
        @Semestre
    )
GO

Creamos nuestro proyecto Windows Forms, y añadimos un nuevo elemento en el explorador de soluciones (Solution Explorer), y escogemos LINQ TO SQL Classes, pueden colocar cualquier nombre a su datacontext. (dml) a continuación se conectan al servidor de base de datos que tengan instalado, si tienen SQLEXPRESS se conectan y escogen la base de datos bdTecMina o la que hayan creado, y arrastran la Tabla Alumnos al diseñador.

A continuación buscan el Procedimiento Almacenado (Store Procedure) y lo colocan en el espacio que se marca en la figura de abajo.

linqtosqlclasessample01

[Dar clic para agrandar las imágenes]

linqtosqlclasessample02

Seleccionamos a continuación la tabla Alumnos y en sus propiedades seleccionamos Insert.

linqtosqlclasessample03

Seleccionamos el Procedimiento Almacenado que habíamos agregado al diseñador.

linqtosqlclasessample04

Nos vamos a diseñar nuestro formulario, muy simple pero es para hacer las pruebas.

linqtosqlclasessample05

Declaramos nuestro dataContext:

        bdSistemaDataContext db = new bdSistemaDataContext();

Agregamos el siguiente código para el botón de Agregar:

 private void button1_Click(object sender, EventArgs e)
        {
        
            string AlumnoID = txtID.Text;
            string Nombre = txtNombre.Text;
            string Semestre = txtSemestre.Text;
            try
            {
                db.InsertarAlumno(AlumnoID, Nombre, Semestre);
                db.SubmitChanges();
                MessageBox.Show("Se ha agregado correctamente");

            }
            catch (Exception ex)
            {
                MessageBox.Show("Ha ocurrido un error");
            }
            finally
            {
                txtID.Text = "";
                txtNombre.Text = "";
                txtSemestre.Text = "";  

            }          
        }

En donde solo paso los valores de los textBoxs a variables string y de ahi al método del procedimiento almacenado, guardo los cambios y limpio los cuadros de textos.

Después visualizando en el DataGridView el código queda así:

private void button2_Click(object sender, EventArgs e)
        {
            var consulta = from alu in db.Alumnos
                           select alu;
            dataGridView1.Refresh();
            dataGridView1.DataSource = consulta.ToList();
        }

Hago una pequeña consulta en LINQ mostrando todos los elementos de la tabla Alumnos en el dataGridView.

Damos F5 y tenemos lo siguiente:

linqtosqlclasessample06

linqtosqlclasessample07

Descarga el código de este ejemplo

Saludos, espero este pequeño ejemplo sea de mucha utilidad, nos vemos en otro post con los siguientes métodos.

PD:Si te ha gustado este post, vota por mi blog (mredison.wordpress.com) en http://blogit.ms en la categoría de SQL Server, te lo agradeceré mucho.

Edison Daniel García Chiñas

Microsoft Student Partner | México

Maratón SQL SERVER 2008

Les comparto los videos de la maratón SQL:

  • Gestión del Servidor mediante facetas
  • Diseño de cubos con Analysis Services
  • Introducción al Declarative Management Framework
  • Instalando SQL Server 2008 en Windows Server 2008
  • Manejo de recursos mediante Resource Governor
  • Nuevos tipos de datos en SQL Server 2008
  • Compresión de datos en SQL Server 2008
  • Monitoreando el desempeño mediante Performance Data Collector
  • Administración mediante Políticas 1
  • Administración mediante Políticas 2
  • Administración mediante Políticas 3

pag_tech_landing_heroes 

URL: http://www.microsoft.com/latam/technet/maratonsql/

Personalizar una Instalación Silverlight

A veces cuando desarrollamos aplicaciones Silverlight, cuando le decimos a un amigo, compañero, etc, cheque nuestra aplicación en el Internet, por lo regular no tienen instalado el plugin de Silverlight, como a continuación:

PersonalizateSilverlightInstallation

El usuario no tiene idea de que debe instalar el plugin, o para que me va a servir eso, que pasa usualmente, si una persona que no conoce esa tecnología cerraría la página.

Como podemos detener o cambiar eso, simplemente personalizandolo, de esta forma:

Supongamos que estamos en nuestro proyecto Silverlight y tenemos el siguiente código:;

PersonalizateSilverlightInstallation1

Lo que debemos hacer es lo siguiente dentro del tag asp:Silverlight tenemos una propiedad llamada PluginNotInstalledTemplate, que va a hacer la que nos permitira personalizar esta instalación.

Añadimos una imagen personalizada.

PersonalizateSilverlightInstallation2

Agregamos lo siguiente:

<PluginNotInstalledTemplate>
               <img src=»logoPersonalizado.png» />
                <br />

                <a href=http://go.microsoft.com/fwlink/?LinkID=115261 a style=»text-decoration: none;»>
                 <img src=»http://go.microsoft.com/fwlink/?LinkId=108181″ alt=»Obtener el plugin de  Silverlight» style=»border-style: none «/>
                  </a>
</PluginNotInstalledTemplate>

Ejecutamos y listo.

PersonalizateSilverlightInstallation3

Esto hará que el usuario no cierre nuestra página web y se anime a instalar el plugin.

PersonalizateSilverlightInstallation4

Espero lo puedan implementar en sus websites que ya cuenten con contenido Silverlight. Recuerden siempre la experiencia de usuario!!

Saludos.