using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
using System.Text;
using System.Security.Cryptography;
public partial class AgregarUsuario_cs : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btnNuevo_Click(object sender, EventArgs e)
{
this.lblAviso.Text = "";
//
// Comprobamos si el nombre ya existe
using (SqlConnection cnn = new SqlConnection(this.SqlDataSource1.ConnectionString))
{
SqlCommand cmd = new SqlCommand(
"SELECT Count(*) " +
"FROM Usuarios " +
"WHERE Correo = @Correo", cnn);
// Abrimos la conexión
cnn.Open();
// Añadimos el valor del parámetro de la consulta
cmd.Parameters.AddWithValue("@Correo", txtCorreo.Text);
// Si devuelve algun valor, es que ya existe
int i = (int)cmd.ExecuteScalar();
if( i > 0 )
{
// Avisamos y salimos
this.lblAviso.Text = "El usuario ya existe";
return;
}
// Al salir del bloque using se cierra la conexión
}
// El usuario no existe, lo anadimos
using (SqlConnection cnn = new SqlConnection(this.SqlDataSource1.ConnectionString))
{
// Usamos el comando Insert del DataSource
SqlCommand cmd = new SqlCommand(this.SqlDataSource1.InsertCommand, cnn);
// Abrimos la conexion
cnn.Open();
// Añadimos el valor del parámetro de la consulta
cmd.Parameters.AddWithValue("@Correo", txtCorreo.Text);
// La clave la guardaremos como un valor SHA1
string clave;
clave = FormsAuthentication.HashPasswordForStoringInConfigFile(
txtClave.Text, "SHA1");
//clave = generarClaveSHA1(txtClave.Text);
cmd.Parameters.AddWithValue("@Clave", clave);
// La fecha será la actual
txtFecha.Text = DateTime.Now.ToString();
cmd.Parameters.AddWithValue("@Fecha", txtFecha.Text);
cmd.Parameters.AddWithValue("@Nombre", txtNombre.Text);
cmd.Parameters.AddWithValue("@Comentarios", txtComentarios.Text);
// Ejecutamos el comando de inserción
cmd.ExecuteNonQuery();
// Al salir del bloque using se cierra la conexión
}
this.lblAviso.Text = "Se ha añadido el nuevo usuario correctamente";
}
// Esta función es la que puedes usar en lugar del método
// HashPasswordForStoringInConfigFile
// Necesita una importación del espacio de nombres:
// System.Security.Cryptography
private string generarClaveSHA1(string clave)
{
// Crear una clave SHA1 como la generada por
// FormsAuthentication.HashPasswordForStoringInConfigFile
UTF8Encoding enc = new UTF8Encoding();
byte[] data = enc.GetBytes(clave);
byte[] result;
//
SHA1CryptoServiceProvider sha = new SHA1CryptoServiceProvider();
result = sha.ComputeHash(data);
//
// Convertir los valores en hexadecimal
// cuando tiene una cifra hay que rellenarlo con cero
// para que siempre ocupen dos dígitos.
StringBuilder sb = new StringBuilder();
for (int i = 0; i < result.Length; i++)
{
// Para que tengan 2 cifras hexadecimales
// y las letras sean en mayúsculas
sb.Append(result[i].ToString("X2"));
}
//
return sb.ToString();
}
// Este código solo es necesario si no se valida en el lado del cliente,
// lo dejo porque forma parte de las pruebas a realizar.
//
// Pero para usarlo en el lado del cliente hay que comentarlo.
protected void CustomValidator1_ServerValidate(object source,
System.Web.UI.WebControls.ServerValidateEventArgs args)
{
args.IsValid = (args.Value.Length > 5);
}
}
|