Pop

30.Aplicaciones web.Objeto Calendar.Curso de C# con Visual Studio 2017.

30-.Aplicaciones web.Objeto Calendar

   - En este capítulo del curso de programación en c# con visual studio 2017,vamos a ver un control de uso común en muchas de las páginas web que utilizamos habitualmente. Este control es el Calendar, que  permite a un usuario seleccionar una fecha mediante un calendario visual.

- El control Calendar muestra un calendario en el que los usuarios pueden desplazarse a cualquier día de cualquier año. Cuando se ejecuta la página ASP.NET, el control Calendar se representa como una tabla HTML. En consecuencia, ciertas propiedades del control corresponden a varios aspectos del formato de la tabla.


- En el video os he mostrado un ejemplo sobre como utilizar este control y algunas de las propiedades que tiene. Os dejo un enlace para completar la información: https://msdn.microsoft.com/es-es/library/system.windows.controls.calendar(v=vs.110).aspx

- Os dejo también el código del ejemplo de uso del control calendario.

  • Código del fichero aspx: 
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="EjemploControlesVarios.aspx.cs" Inherits="GestionVarios.EjemploControlesVarios" %>

<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <asp:Calendar ID="Calendar1" runat="server" ></asp:Calendar>
            <asp:Label runat="server" ID="lblMostrar"></asp:Label>
            <asp:Button runat="server" ID="btnClic" Text="Dale" OnClick="btnClic_Click" />
        </div>
    </form>
</body>
</html>

  • Código del fichero cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace GestionVarios
{
    public partial class EjemploControlesVarios : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
            Calendar1.SelectedDate = DateTime.Now;
            lblMostrar.Text = Calendar1.SelectedDate.ToShortDateString();
        }
        }

        protected void btnClic_Click(object sender, EventArgs e)
        {
            if (Calendar1.SelectedDate < DateTime.Now)
                lblMostrar.Text = "No puede seleccionar una fecha anterior a hoy";
            else
                lblMostrar.Text = "OK";
        }
}
}

29.Aplicaciones web.Encriptando password.Curso de C# con Visual Studio 2017.

29-.Aplicaciones web.Encriptando password

   - En este capítulo del curso de programación en c# con visual studio 2017 aprenderemos a encriptar password utlilizando el espacion de nombres System.Security.Cryptography disponible en los frameworks de .net.

- El espacio de nombres  System.Security.Cryptography proporciona servicios criptográficos, incluidas la codificación y descodificación segura de datos, así como muchas otras operaciones, como cálculos hash, generación de números aleatorios y la autenticación de mensajes.

- Una vez tengamos la contraseña cifrada la guardamos en la base de datos mediante una llamada a un procedimiento almacenado. En el video tenéis todo el proceso, tanto el cifrado como la llamada al procedimiento almacenado para guardar en base de datos.


- Os dejo unos enlaces a páginas donde podéis completar información sonre este tema:

  1. https://msdn.microsoft.com/es-es/library/system.security.cryptography(v=vs.110).aspx
  2. https://msdn.microsoft.com/es-es/library/system.security.cryptography.aes(v=vs.110).aspx
  3. https://msdn.microsoft.com/es-es/library/92f9ye3s(v=vs.110).aspx

- Como acostumbro os dejo también el código visto en el ejemplo:


  •  Clase que utilizo para el cifrado/encriptación:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Web;

namespace GestionVarios
{
    public class Cifrado
    {
        Aes miAes = null;

        public Cifrado(byte[] clave)
        {
            miAes = Aes.Create();
            miAes.Key = clave;
        }

        public byte[] cifrar(string original)
        {
            byte[] encrypted = EncriptarStringToBytesAes(original, miAes.Key, miAes.IV);
            return encrypted;
        }

        public string descifrar(byte[] encrypted)
        {
            string roundtrip = DesencriptarStringFromBytesAes(encrypted, miAes.Key, miAes.IV);
            return roundtrip;

        }

        private byte[] EncriptarStringToBytesAes(string cadena, byte[] clave, byte[] IV)
        {

            if (cadena == null || cadena.Length <= 0)
                throw new ArgumentNullException("plainText");

            if (clave == null || clave.Length <= 0)
                throw new ArgumentNullException("Key");

            if (IV == null || IV.Length <= 0)
                throw new ArgumentNullException("IV");

            byte[] encrypted;

           using (Aes aesAlg = Aes.Create())
           {
                aesAlg.Key = clave;
                aesAlg.IV = IV;
                ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);

                using (MemoryStream msEncrypt = new MemoryStream())
                {
                    using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
                    {
                        using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
                        {
                            swEncrypt.Write(cadena);

                        }
                        encrypted = msEncrypt.ToArray();
                    }

                }

            }
            return encrypted;
        }

        private string DesencriptarStringFromBytesAes(byte[] textoCifrado, byte[] clave, byte[] IV)
        {
            if (textoCifrado == null || textoCifrado.Length <= 0)
                throw new ArgumentNullException("cipherText");
            if (clave == null || clave.Length <= 0)
                throw new ArgumentNullException("Key");
            if (IV == null || IV.Length <= 0)
                throw new ArgumentNullException("IV");
            string plaintext = null;

            using (Aes aesAlg = Aes.Create())
            {
                aesAlg.Key = clave;
                aesAlg.IV = IV;

                ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);
             
                using (MemoryStream msDecrypt = new MemoryStream(textoCifrado))
                {

                    using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
                    {
                        using (StreamReader srDecrypt = new StreamReader(csDecrypt))
                        {
                          plaintext = srDecrypt.ReadToEnd();

                        }
                    }

                }
            }
            return plaintext;
        }

    }
}


  • aspx de alta de usuario:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="AltaUsuario.aspx.cs" Inherits="GestionVarios.AltaUsuario" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
</head>
<body>
    <form id="form1" runat="server">

        <table width="700px" border="0" cellpadding="0" cellspacing="0" align="center">
            <tr>
                <td width="700px" style="height: 40px; vertical-align: middle;" colspan="2" align="left">
                    <h1>Datos de acceso</h1>
                <br />
                </td>
            </tr>

            <tr>
                 <td width="250px" height="22px" align="left" style="vertical-align: top">Nombre usuario:</td>
                 <td width="450px" align="left" style="vertical-align: top">
                    <asp:TextBox ID="txtnombre" runat="server" Width="300px"  ForeColor="Black" ></asp:TextBox>
                    <asp:RequiredFieldValidator ID="reqNombre" runat="server" ControlToValidate="txtnombre" ErrorMessage="*" Display="Dynamic" ForeColor="Red"  ></asp:RequiredFieldValidator><br />
                 </td>

            </tr>
                 <tr>
                 <td width="250px" height="22px" align="left" style="vertical-align: top">Pais:</td>
                 <td width="450px" align="left" style="vertical-align: top">
                    <asp:DropDownList runat="server" id="cmbPaises" AppendDataBoundItems="True" Width="311px" DataSourceID="SqlDataSource1" DataTextField="Pais" DataValueField="CodPais">
                        <asp:ListItem Text="Seleccione un pais" Value="-1">-SELECCIONAR-</asp:ListItem>
                         </asp:DropDownList>
                     <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:EmpresaConnectionString %>" SelectCommand="DamePaises" SelectCommandType="StoredProcedure"></asp:SqlDataSource>
                <asp:RequiredFieldValidator id="reqPais"  ControlToValidate="cmbPaises" ErrorMessage="* Seleccione pais"   Display="Dynamic" InitialValue="-1" runat="server" ForeColor="Red" />
                 </td>

            </tr>
            <tr>
                <td width="250px" height="22px" align="left" style="vertical-align: top">Dirección de E-Mail:
                </td>
                <td width="450px" align="left" style="vertical-align: top">
                    <asp:TextBox ID="mtxtEMail" runat="server" Width="300px"  ForeColor="Black" ></asp:TextBox>
                    <asp:RequiredFieldValidator ID="mreqEMail" runat="server" ControlToValidate="mtxtEMail" ErrorMessage="*" Display="Dynamic" ForeColor="Red"  ></asp:RequiredFieldValidator><br />
                    <asp:RegularExpressionValidator ID="mregEMail" runat="server" ControlToValidate="mtxtEMail" ErrorMessage="La Dirección de E-Mail especificada no es válida.<br>" ValidationExpression="\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" Display="Dynamic"  ForeColor="Red"></asp:RegularExpressionValidator>
                </td>
            </tr>
            <tr>
                <td width="250px" height="22px" align="left" style="vertical-align: top">Contraseña:
                </td>
                <td width="450px" align="left" style="vertical-align: top">
                    <asp:TextBox ID="mtxtPassword" runat="server" Width="150px" MaxLength="20" TextMode="Password"></asp:TextBox>
                    <br />
                    <asp:RequiredFieldValidator ID="mreqPassword" runat="server" ControlToValidate="mtxtPassword" ErrorMessage="Debe especificar una contraseña de al menos 6 caracteres.<br>" Display="Dynamic" ForeColor="Red"></asp:RequiredFieldValidator>
                    <asp:RegularExpressionValidator ID="mregPassword" runat="server" ControlToValidate="mtxtPassword" ErrorMessage="La contraseña no es correcta (min. 6 cars)." ValidationExpression="\w+.{5,}" Display="Dynamic" ForeColor="Red"></asp:RegularExpressionValidator>
                </td>
            </tr>
            <tr>
                <td width="250px" height="22px" align="left" style="vertical-align: top">Confirmar Contraseña:
                </td>
                <td width="450px" align="left" style="vertical-align: top">
                    <asp:TextBox ID="mtxtPassword2" runat="server" Width="150px" MaxLength="20" TextMode="Password"  ></asp:TextBox>
                   <br />
                    <asp:RequiredFieldValidator ID="mreqPassword2" runat="server" ControlToValidate="mtxtPassword2" ErrorMessage="Debe confirmar la contraseña.<br>" Display="Dynamic" ForeColor="Red"></asp:RequiredFieldValidator>
                    <asp:CompareValidator ID="mcomPasswords" runat="server" ErrorMessage="Las contraseñas no son iguales." Display="Dynamic" ControlToCompare="mtxtPassword" ControlToValidate="mtxtPassword2" ForeColor="Red"></asp:CompareValidator>
                </td>
            </tr>
               <tr>
                   <td>&nbsp;</td>
                <td width="250px" height="22px" align="left" style="vertical-align: top">
                    <asp:CheckBox ID="chkCondiciones" runat="server"/><asp:HyperLink ID="linkCondiciones" runat="server" Text="Condiciones servicio" NavigateUrl="~/CondicionesServicio.aspx"></asp:HyperLink><br />
                </td>
                </tr>     
            <tr>
                <td width="700px" style="height: 40px; vertical-align: middle;" colspan="2" align="center" colspan="2">
                    <asp:Button ID="mbtnRegistrar" runat="server" Text="ALTA" OnClick="mbtnRegistrar_Click" />
                       <asp:Label runat="server" ID="lblError" Visible="false" ForeColor="Red"></asp:Label>
                </td>
            </tr>
          
        </table>
    </form>
</body>
</html>



  • fichero cs del alta de cliente:
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace GestionVarios
{
    public partial class AltaUsuario : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void mbtnRegistrar_Click(object sender, EventArgs e)
        {
            lblError.Visible = true;
            if (chkCondiciones.Checked == false)
            {
                
                lblError.Text = "Debes aceptar los términos y condiciones del servicio.";
            }
            else
            {
                byte[] passCifrada = cifrar(mtxtPassword.Text.Trim());
                if (guardarUsuario(passCifrada))
                {
                    lblError.Text = "Usuario dado de alta correctamente";
                    lblError.ForeColor = Color.Green;
                }

            }
        }

        private Boolean guardarUsuario(byte[] passCifrada)
        {
            Boolean todoOk = true;
            SqlConnection conexion = new SqlConnection(ConfigurationManager.ConnectionStrings["EmpresaConnectionString"].ConnectionString);
            try
            {
                conexion.Open();
                SqlCommand com = conexion.CreateCommand();
                com.CommandType = System.Data.CommandType.StoredProcedure;
                com.CommandText = "dbo.AltaUsuario";
                com.Parameters.Add("@nombre",SqlDbType.VarChar,255).Value=txtnombre.Text;
                com.Parameters.Add("@email", SqlDbType.VarChar, 255).Value = mtxtEMail.Text;
                com.Parameters.Add("@pass", SqlDbType.VarBinary, 8000).Value = passCifrada;
                com.Parameters.Add("@codPais", SqlDbType.VarChar, 3).Value = cmbPaises.SelectedValue;

                com.ExecuteNonQuery();

            
            }
            catch (Exception ex)
            {
                lblError.Text = "Se produjo un error guardando el usuario." + ex.Message;
                lblError.ForeColor = Color.Red;
                todoOk = false;
            }
            finally
            {
                if (conexion != null && conexion.State == System.Data.ConnectionState.Open)
                    conexion.Close();

                conexion.Dispose();
            }

            return todoOk;
        }

        private byte[] cifrar(string cadenaAcifrar)
        {
            String miclave = ConfigurationManager.AppSettings["clave"];
            byte[] claveCifrado = System.Text.Encoding.ASCII.GetBytes(miclave);
            Cifrado c = new Cifrado(claveCifrado);
            byte[] b = c.cifrar(cadenaAcifrar);
            return b;
        }



    }
}

28.Aplicaciones web.SQL parte 2.Curso de C# con Visual Studio 2017.

28- . Aplicaciones web.Llamando a BDDD desde la aplicación

   - En este capítulo del curso de programación en c# con visual studio 2017,continuamos con un poco de SQL SERVER. Para ello debéis tener instalado SQL Express.En la anterior entrada del blog os deje un enlace para que lo pudierais descargar e instalar.

- En este capítulo conectamos nuestra página de alta de usuario a nuestra base de datos SQL via procedimientos almacenado. Para ello necesitamos establecer una cadena de conexión, que podemos inicializar en el web.config, que es el archivo principal de opciones de configuración para una aplicación web hecha en asp.net. El archivo es un documento que define información de configuración concerniente a la aplicación web. El archivo web.config contiene información que controla la carga de módulos, configuraciones de seguridad, configuraciones del estado de la sesión, opciones de compilación y el lenguaje de la aplicación. Los archivos web.config pueden contener también objetos específicos tales como cadenas de conexión.En nuestro caso la cadena de conexión va con autenticación windows  en vez de con usuario y password :

  <connectionStrings>
    <add name="EmpresaConnectionString" connectionString="Data Source=LAPTOP-C3OQ67NM\SQLEXPRESS;Initial Catalog=Empresa;Integrated Security=True"
      providerName="System.Data.SqlClient" />
  </connectionStrings>




- Una vez que tenemos inicializada la cadena de conexión, la utilizamos para cargar el combo con los paises via procedimiento almacenado  y para guardar los datos de un usuario que utilice el formulario de alta. Los procedimientos almacenados que llamamos desde el código son los siguientes:

  • El procedimiento que nos devuelve los paises es el siguiente: 
ALTER PROCEDURE [dbo].[DamePaises]
   
AS
BEGIN

    SET NOCOUNT ON;
   
    SELECT Pais,CodPais FROM Paises order by 2 asc

END


  •  El procedimiento almacenado que se encarga de guardar el usuario es este:
ALTER PROCEDURE [dbo].[AltaUsuario]
    @nombre varchar(255),
    @email varchar(255),
    @pass varbinary(MAX)=NULL,
    @codPais varchar(3)
AS
BEGIN

    SET NOCOUNT ON;

    DECLARE @idpais int

    SELECT @idpais=idPais FROM Paises WHERE CodPais = @codPais

    INSERT INTO dbo.Usuarios(Nombre,Email,Pass,IdPais) VALUES
   (@nombre,@email,@pass,@idpais)

END 


- Una vez que tenenos definidos los procedimientos almacenados que vamos a utlizar ya los podemos llamar desde nuestra aplicación cliente.Os dejo el código de la aplicación:

  •  Código de la página de AltaUsuario.aspx:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="AltaUsuario.aspx.cs" Inherits="GestionVarios.AltaUsuario" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
</head>
<body>
    <form id="form1" runat="server">

        <table width="700px" border="0" cellpadding="0" cellspacing="0" align="center">
            <tr>
                <td width="700px" style="height: 40px; vertical-align: middle;" colspan="2" align="left">
                    <h1>Datos de acceso</h1>
                <br />
                </td>
            </tr>

            <tr>
                 <td width="250px" height="22px" align="left" style="vertical-align: top">Nombre usuario:</td>
                 <td width="450px" align="left" style="vertical-align: top">
                    <asp:TextBox ID="txtnombre" runat="server" Width="300px"  ForeColor="Black" ></asp:TextBox>
                    <asp:RequiredFieldValidator ID="reqNombre" runat="server" ControlToValidate="txtnombre" ErrorMessage="*" Display="Dynamic" ForeColor="Red"  ></asp:RequiredFieldValidator><br />
                 </td>

            </tr>
                 <tr>
                 <td width="250px" height="22px" align="left" style="vertical-align: top">Pais:</td>
                 <td width="450px" align="left" style="vertical-align: top">
                    <asp:DropDownList runat="server" id="cmbPaises" AppendDataBoundItems="True" Width="311px" DataSourceID="SqlDataSource1" DataTextField="Pais" DataValueField="CodPais">
                        <asp:ListItem Text="Seleccione un pais" Value="-1">-SELECCIONAR-</asp:ListItem>
                            <asp:ListItem Text="España" Value="1"></asp:ListItem>
                            <asp:ListItem Text="Portugal" Value="2"></asp:ListItem>
                            <asp:ListItem Text="Francia" Value="3"></asp:ListItem>
                            <asp:ListItem Text="Italia" Value="4"></asp:ListItem>
                 </asp:DropDownList>
                     <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:EmpresaConnectionString %>" SelectCommand="DamePaises" SelectCommandType="StoredProcedure"></asp:SqlDataSource>
                <asp:RequiredFieldValidator id="reqPais"  ControlToValidate="cmbPaises" ErrorMessage="* Seleccione pais"   Display="Dynamic" InitialValue="-1" runat="server" ForeColor="Red" />
                 </td>

            </tr>
            <tr>
                <td width="250px" height="22px" align="left" style="vertical-align: top">Dirección de E-Mail:
                </td>
                <td width="450px" align="left" style="vertical-align: top">
                    <asp:TextBox ID="mtxtEMail" runat="server" Width="300px"  ForeColor="Black" ></asp:TextBox>
                    <asp:RequiredFieldValidator ID="mreqEMail" runat="server" ControlToValidate="mtxtEMail" ErrorMessage="*" Display="Dynamic" ForeColor="Red"  ></asp:RequiredFieldValidator><br />
                    <asp:RegularExpressionValidator ID="mregEMail" runat="server" ControlToValidate="mtxtEMail" ErrorMessage="La Dirección de E-Mail especificada no es válida.<br>" ValidationExpression="\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" Display="Dynamic"  ForeColor="Red"></asp:RegularExpressionValidator>
                </td>
            </tr>
            <tr>
                <td width="250px" height="22px" align="left" style="vertical-align: top">Contraseña:
                </td>
                <td width="450px" align="left" style="vertical-align: top">
                    <asp:TextBox ID="mtxtPassword" runat="server" Width="150px" MaxLength="20" TextMode="Password"></asp:TextBox>
                    <br />
                    <asp:RequiredFieldValidator ID="mreqPassword" runat="server" ControlToValidate="mtxtPassword" ErrorMessage="Debe especificar una contraseña de al menos 6 caracteres.<br>" Display="Dynamic" ForeColor="Red"></asp:RequiredFieldValidator>
                    <asp:RegularExpressionValidator ID="mregPassword" runat="server" ControlToValidate="mtxtPassword" ErrorMessage="La contraseña no es correcta (min. 6 cars)." ValidationExpression="\w+.{5,}" Display="Dynamic" ForeColor="Red"></asp:RegularExpressionValidator>
                </td>
            </tr>
            <tr>
                <td width="250px" height="22px" align="left" style="vertical-align: top">Confirmar Contraseña:
                </td>
                <td width="450px" align="left" style="vertical-align: top">
                    <asp:TextBox ID="mtxtPassword2" runat="server" Width="150px" MaxLength="20" TextMode="Password"  ></asp:TextBox>
                   <br />
                    <asp:RequiredFieldValidator ID="mreqPassword2" runat="server" ControlToValidate="mtxtPassword2" ErrorMessage="Debe confirmar la contraseña.<br>" Display="Dynamic" ForeColor="Red"></asp:RequiredFieldValidator>
                    <asp:CompareValidator ID="mcomPasswords" runat="server" ErrorMessage="Las contraseñas no son iguales." Display="Dynamic" ControlToCompare="mtxtPassword" ControlToValidate="mtxtPassword2" ForeColor="Red"></asp:CompareValidator>
                </td>
            </tr>
               <tr>
                   <td>&nbsp;</td>
                <td width="250px" height="22px" align="left" style="vertical-align: top">
                    <asp:CheckBox ID="chkCondiciones" runat="server"/><asp:HyperLink ID="linkCondiciones" runat="server" Text="Condiciones servicio" NavigateUrl="~/CondicionesServicio.aspx"></asp:HyperLink><br />
                </td>
                </tr>     
            <tr>
                <td width="700px" style="height: 40px; vertical-align: middle;" colspan="2" align="center" colspan="2">
                    <asp:Button ID="mbtnRegistrar" runat="server" Text="ALTA" OnClick="mbtnRegistrar_Click" />
                       <asp:Label runat="server" ID="lblError" Visible="false" ForeColor="Red"></asp:Label>
                </td>
            </tr>
          
        </table>
    </form>
</body>
</html>


  • Cdigo del fichero cs asociado: ´
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace GestionVarios
{
    public partial class AltaUsuario : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void mbtnRegistrar_Click(object sender, EventArgs e)
        {
            lblError.Visible = true;
            if (chkCondiciones.Checked == false)
            {
              
                lblError.Text = "Debes aceptar los términos y condiciones del servicio.";
            }
            else
            {
                guardarUsuario();
                lblError.Text = "Usuario dado de alta correctamente";
                lblError.ForeColor = Color.Green;

            }
        }

        private void guardarUsuario()
        {
            SqlConnection conexion = new SqlConnection(ConfigurationManager.ConnectionStrings["EmpresaConnectionString"].ConnectionString);
            try
            {
                conexion.Open();
                SqlCommand com = conexion.CreateCommand();
                com.CommandType = System.Data.CommandType.StoredProcedure;
                com.CommandText = "dbo.AltaUsuario";
                com.Parameters.Add("@nombre",SqlDbType.VarChar,255).Value=txtnombre.Text;
                com.Parameters.Add("@email", SqlDbType.VarChar, 255).Value = mtxtEMail.Text;
                // com.Parameters.Add("@pass", SqlDbType.VarBinary, 8000).Value = mtxtEMail.Text;
                com.Parameters.Add("@codPais", SqlDbType.VarChar, 3).Value = cmbPaises.SelectedValue;

                com.ExecuteNonQuery();

            
            }
            catch (Exception ex)
            {
                lblError.Text = "Se produjo un error guardando el usuario:" + ex.Message;
            }
            finally
            {
                if (conexion != null && conexion.State == System.Data.ConnectionState.Open)
                    conexion.Close();

                conexion.Dispose();
            }
        }
    }
}



 





27.Aplicaciones web.SQL parte 1.Curso de C# con Visual Studio 2017.

27- . Aplicaciones web.Un poco de SQL

   - En este capítulo del curso de programación en c# con visual studio 2017,empezaremos a ver un poco de SQL SERVER. Para ello debéis tener instalado SQL Express.En la anterior entrada del blog os deje un enlace para que lo pudierais descargar e instalar.

  - Una vez instalado nos creamos una base de datos que utilizaremos para guardar los datos del formulario de registro que vimos en el capítulo anterior.Llamamos a la base de datos con el nombre Empresa.


- Una vez creada la base de datos nos creamos dos tablas para almacenar los datos. Una tabla a la que llamaremos Usuarios y otra tabla a la que llamaremos Paises.La tabla Usuarios tiene los siguientes campos:

 Y la tabla Paises está compuesta por estos campos:


- Por si no conocéis los tipos de datos que existen en SQL Server os dejo este enlace con la información:
https://docs.microsoft.com/es-es/sql/t-sql/data-types/data-types-transact-sql

- Una vez tenemos definidas las dos tablas ya podemos guardar,borrar y consultar datos en ellas ya sea de forma manual o via script. Para el caso de guardar datos en la tabla usuarios nos creamos un procedimiento almacenado(mas información):

CREATE PROCEDURE [dbo].[AltaUsuario]
    @nombre varchar(255),
    @email varchar(255),
    @pass varbinary(MAX)=NULL,
    @codPais varchar(3)
AS
BEGIN

    SET NOCOUNT ON;

    DECLARE @idpais int

    SELECT @idpais=idPais FROM Paises WHERE CodPais = @codPais

    INSERT INTO dbo.Usuarios(Nombre,Email,Pass,IdPais) VALUES
   (@nombre,@email,@pass,@idpais)

END

- En la siguiente entrada del blog continuaremos con SQL.Veremos como conectar la aplicación web con la base de datos.

26.Aplicaciones web.Formulario de alta.Curso de C# con Visual Studio 2017.

26- . Aplicaciones web.Creando un formulario de registro

   - En este capítulo del curso de programación en c# con visual studio 2017,vamos a practicar el uso de algunos de los controles web vistos en las entradas anteriores del blog. Para ello nos crearemos una página web donde simularemos el alta en un servicio.En este formulario de registro practicamos el uso de estos controles:

  • Dropdownlist: Cargamos el combo con algunos paises.
  • Validadores: Utilizamos los validadores vistos en el capítulo anterior (RequiredFieldValidator, RegularExpressionValidator y CompareValidator) para controlar que el usuario introduzca todos los datos necesarios para darse de alta.
  • CheckBox: Forzamos que el usuario sólo pueda continuar en el caso que que este control este seleccionado.
  • TextBox:Campos que el usuario debe rellenar.
  • HyperLink: Link que redirige a una página de condiciones de servicio que nos hemos inventado.


- En el siguente cápitulo del cuso empezaremos con un poco de SQL.Asi que dejo el enlace donde podréis descargaros la versión express de forma gratuita:

https://www.microsoft.com/es-es/sql-server/sql-server-editions-express

- También os dejo el código del ejemplo:

* Parte cliente: 

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="AltaUsuario.aspx.cs" Inherits="GestionVarios.AltaUsuario" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
</head>
<body>
    <form id="form1" runat="server">

        <table width="700px" border="0" cellpadding="0" cellspacing="0" align="center">
            <tr>
                <td width="700px" style="height: 40px; vertical-align: middle;" colspan="2" align="left">
                    <h1>Datos de acceso</h1>
                <br />
                </td>
            </tr>

            <tr>
                 <td width="250px" height="22px" align="left" style="vertical-align: top">Nombre usuario:</td>
                 <td width="450px" align="left" style="vertical-align: top">
                    <asp:TextBox ID="txtnombre" runat="server" Width="300px"  ForeColor="Black" ></asp:TextBox>
                    <asp:RequiredFieldValidator ID="reqNombre" runat="server" ControlToValidate="txtnombre" ErrorMessage="*" Display="Dynamic" ForeColor="Red"  ></asp:RequiredFieldValidator><br />
                 </td>

            </tr>
                 <tr>
                 <td width="250px" height="22px" align="left" style="vertical-align: top">Pais:</td>
                 <td width="450px" align="left" style="vertical-align: top">
                    <asp:DropDownList runat="server" id="cmbPaises" AppendDataBoundItems="True" Width="311px" DataSourceID="SqlDataSource1" DataTextField="Pais" DataValueField="CodPais">
                        <asp:ListItem Text="Seleccione un pais" Value="-1">-SELECCIONAR-</asp:ListItem>
                            <asp:ListItem Text="España" Value="1"></asp:ListItem>
                            <asp:ListItem Text="Portugal" Value="2"></asp:ListItem>
                            <asp:ListItem Text="Francia" Value="3"></asp:ListItem>
                            <asp:ListItem Text="Italia" Value="4"></asp:ListItem>
                 </asp:DropDownList>
                <asp:RequiredFieldValidator id="reqPais"  ControlToValidate="cmbPaises" ErrorMessage="* Seleccione pais"   Display="Dynamic" InitialValue="-1" runat="server" ForeColor="Red" />
                 </td>

            </tr>
            <tr>
                <td width="250px" height="22px" align="left" style="vertical-align: top">Dirección de E-Mail:
                </td>
                <td width="450px" align="left" style="vertical-align: top">
                    <asp:TextBox ID="mtxtEMail" runat="server" Width="300px"  ForeColor="Black" ></asp:TextBox>
                    <asp:RequiredFieldValidator ID="mreqEMail" runat="server" ControlToValidate="mtxtEMail" ErrorMessage="*" Display="Dynamic" ForeColor="Red"  ></asp:RequiredFieldValidator><br />
                    <asp:RegularExpressionValidator ID="mregEMail" runat="server" ControlToValidate="mtxtEMail" ErrorMessage="La Dirección de E-Mail especificada no es válida.<br>" ValidationExpression="\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" Display="Dynamic"  ForeColor="Red"></asp:RegularExpressionValidator>
                </td>
            </tr>
            <tr>
                <td width="250px" height="22px" align="left" style="vertical-align: top">Contraseña:
                </td>
                <td width="450px" align="left" style="vertical-align: top">
                    <asp:TextBox ID="mtxtPassword" runat="server" Width="150px" MaxLength="20" TextMode="Password"></asp:TextBox>
                    <br />
                    <asp:RequiredFieldValidator ID="mreqPassword" runat="server" ControlToValidate="mtxtPassword" ErrorMessage="Debe especificar una contraseña de al menos 6 caracteres.<br>" Display="Dynamic" ForeColor="Red"></asp:RequiredFieldValidator>
                    <asp:RegularExpressionValidator ID="mregPassword" runat="server" ControlToValidate="mtxtPassword" ErrorMessage="La contraseña no es correcta (min. 6 cars)." ValidationExpression="\w+.{5,}" Display="Dynamic" ForeColor="Red"></asp:RegularExpressionValidator>
                </td>
            </tr>
            <tr>
                <td width="250px" height="22px" align="left" style="vertical-align: top">Confirmar Contraseña:
                </td>
                <td width="450px" align="left" style="vertical-align: top">
                    <asp:TextBox ID="mtxtPassword2" runat="server" Width="150px" MaxLength="20" TextMode="Password"  ></asp:TextBox>
                   <br />
                    <asp:RequiredFieldValidator ID="mreqPassword2" runat="server" ControlToValidate="mtxtPassword2" ErrorMessage="Debe confirmar la contraseña.<br>" Display="Dynamic" ForeColor="Red"></asp:RequiredFieldValidator>
                    <asp:CompareValidator ID="mcomPasswords" runat="server" ErrorMessage="Las contraseñas no son iguales." Display="Dynamic" ControlToCompare="mtxtPassword" ControlToValidate="mtxtPassword2" ForeColor="Red"></asp:CompareValidator>
                </td>
            </tr>
               <tr>
                   <td>&nbsp;</td>
                <td width="250px" height="22px" align="left" style="vertical-align: top">
                    <asp:CheckBox ID="chkCondiciones" runat="server"/><asp:HyperLink ID="linkCondiciones" runat="server" Text="Condiciones servicio" NavigateUrl="~/CondicionesServicio.aspx"></asp:HyperLink><br />
                </td>
                </tr>     
            <tr>
                <td width="700px" style="height: 40px; vertical-align: middle;" colspan="2" align="center" colspan="2">
                    <asp:Button ID="mbtnRegistrar" runat="server" Text="ALTA" OnClick="mbtnRegistrar_Click" />
                       <asp:Label runat="server" ID="lblError" Visible="false" ForeColor="Red"></asp:Label>
                </td>
            </tr>
          
        </table>
    </form>
</body>
</html>

 *Parte servidor:


 using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace GestionVarios
{
    public partial class AltaUsuario : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void mbtnRegistrar_Click(object sender, EventArgs e)
        {
            lblError.Visible = true;
            if (chkCondiciones.Checked == false)
            {
             
                lblError.Text = "Debes aceptar los términos y condiciones del servicio.";
            }
            else
            {
                 lblError.Text = "Usuario dado de alta correctamente";
                lblError.ForeColor = Color.Green;

            }
          


        }
}
}


25.Aplicaciones web.Validadores.Curso de C# con Visual Studio 2017.

  25- . Aplicaciones web.Validadores

   - En este capítulo del curso de programación en c# con visual studio 2017,vamos a ver algunos de los controles de validación que trae este entorno de programación.Nos centraremos en tres de ellos:
RequiredFieldValidator , RegularExpressionValidatorCompareValidator:

  • RequiredFieldValidator: Con este control obligamos al usuario a que rellene todos los campos de entrada necesarios en un formulario.
  • RegularExpressionValidator: Comprueba que los datos proporcionados por el usuario coinciden con un modelo definido por una expresión regular.
  • CompareValidator : Compara los datos de los dos controles que se le especifiquen.

- El más complejo de los tres controles quizás sea el  RegularExpressionValidator porque es necesario conocer el funcionamiento de las expresiones regulares.Para los que no sepáis lo que son aqui os dejo un enlace. En el video os explico como usar este control y los otros dos.



- Para comprender mejor las expresiones regulares vamos a intentar analizar una:

   string expresion= "href\\s*=\\s*(?:[\"'](?<1>[^\"']*)[\"']|(?<1>\\S+))";


  1. href: Busca coincidencias con la cadena literal "href". La búsqueda no distingue entre mayúsculas y minúsculas.
  2. \s*: Busca coincidencias con cero o más caracteres de espacio en blanco.
  3. =:  Busca coincidencias con el signo de igualdad.
  4. \s*: Busca coincidencias con cero o más caracteres de espacio en blanco.
  5.  (?:["'](?<1>[^"']*)"|(?<1>\S+)): Busca coincidencias con uno de los siguientes elementos sin asignar el resultado a un grupo capturado: 
    • Una comilla o apóstrofo, seguido de cero o más apariciones de cualquier carácter que no sea una comilla o un apóstrofo, seguido por una comilla o un apóstrofo.Este modelo incluye el grupo denominado 1.
    • Uno o más caracteres que no sean un espacio en blanco.Este modelo incluye el grupo denominado 1.

      6. (?<1>[^"']*): Asigna cero o más apariciones de cualquier carácter distinto de una comilla o un apóstrofo al grupo de captura denominado 1.
     7."(?<1>\S+): Asigna uno o más caracteres que no sean un espacio en blanco al grupo de captura denominado 1.


- Os dejo también unos enlaces para completar información sobre los tres controles vistos en el video:


- También os dejo el código fuente tanto de la parte de cliente vista en el video:

 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="AltaUsuario.aspx.cs" Inherits="GestionVarios.AltaUsuario" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
</head>
<body>
    <form id="form1" runat="server">

        <table width="700px" border="0" cellpadding="0" cellspacing="0" align="center">
            <tr>
                <td width="700px" style="height: 40px; vertical-align: middle;" colspan="2" align="left">
                    <h1>Datos de acceso</h1>
               
                </td>
            </tr>
            <tr>
                <td width="250px" height="22px" align="left" style="vertical-align: top">Dirección de E-Mail:
                </td>
                <td width="450px" align="left" style="vertical-align: top">
                    <asp:TextBox ID="mtxtEMail" runat="server" Width="300px"  ForeColor="Black" ></asp:TextBox>
                    <asp:RequiredFieldValidator ID="mreqEMail" runat="server" ControlToValidate="mtxtEMail" ErrorMessage="*" Display="Dynamic" ForeColor="Red"  ></asp:RequiredFieldValidator><br />
                    <asp:RegularExpressionValidator ID="mregEMail" runat="server" ControlToValidate="mtxtEMail" ErrorMessage="La Dirección de E-Mail especificada no es válida.<br>" ValidationExpression="\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" Display="Dynamic"  ForeColor="Red"></asp:RegularExpressionValidator>
                </td>
            </tr>
            <tr>
                <td width="250px" height="22px" align="left" style="vertical-align: top">Contraseña:
                </td>
                <td width="450px" align="left" style="vertical-align: top">
                    <asp:TextBox ID="mtxtPassword" runat="server" Width="150px" MaxLength="20" TextMode="Password"></asp:TextBox>
                    <br />
                    <asp:RequiredFieldValidator ID="mreqPassword" runat="server" ControlToValidate="mtxtPassword" ErrorMessage="Debe especificar una contraseña de al menos 6 caracteres.<br>" Display="Dynamic" ForeColor="Red"></asp:RequiredFieldValidator>
                    <asp:RegularExpressionValidator ID="mregPassword" runat="server" ControlToValidate="mtxtPassword" ErrorMessage="La contraseña no es correcta (min. 6 cars)." ValidationExpression="\w+.{5,}" Display="Dynamic" ForeColor="Red"></asp:RegularExpressionValidator>
                </td>
            </tr>
            <tr>
                <td width="250px" height="22px" align="left" style="vertical-align: top">Confirmar Contraseña:
                </td>
                <td width="450px" align="left" style="vertical-align: top">
                    <asp:TextBox ID="mtxtPassword2" runat="server" Width="150px" MaxLength="20" TextMode="Password"  ></asp:TextBox>
                   <br />
                    <asp:RequiredFieldValidator ID="mreqPassword2" runat="server" ControlToValidate="mtxtPassword2" ErrorMessage="Debe confirmar la contraseña.<br>" Display="Dynamic" ForeColor="Red"></asp:RequiredFieldValidator>
                    <asp:CompareValidator ID="mcomPasswords" runat="server" ErrorMessage="Las contraseñas no son iguales." Display="Dynamic" ControlToCompare="mtxtPassword" ControlToValidate="mtxtPassword2" ForeColor="Red"></asp:CompareValidator>
                </td>
            </tr>
            <tr>
                <td width="700px" style="height: 40px; vertical-align: middle;" colspan="2" align="center">
                    <asp:Button ID="mbtnRegistrar" runat="server" Text="ALTA" OnClick="mbtnRegistrar_Click" />

                </td>
            </tr>
            </tr>
        </table>
    </form>
</body>
</html>
 

   

Curso .NET Core en C# - 34.Creamos nuestro propio log

34.Creamos nuestro propio log Hola a todos. En este curso, analizaremos todos los conceptos básicos, intermedios y avanzados de  ASP.NET...