Creamos un nuevo WebSite en c:\inetpub\wwwroot. (crea los ficheros Default.aspx, Default.aspx.cs y web.config).
Impediremos el acceso a las páginas de aquellos usuarios que no estén dados de alta en la tabla Usuarios de la base de datos Guasa.
Incluir en el ficheroweb.config
la sección siguiente:
<authentication mode="Forms">
<forms loginUrl="Default.aspx" defaultUrl="Default2.aspx"/>
</authentication>
<authorization>
<deny users="?"/>
<!-- solo los usuarios autentificados -->
</authorization>
Para realizar una única conexion con la base de datos para utilizar en toda la aplicación, creamos una cadena de conexion (colocarla después de la cadena <appSettings/> y antes de <system.web>)
<connectionStrings>
<add name="conexionSQLServer"
connectionString="Data Source=localhost\SQLEXPRESS;Persist
Security Info=True;Password=chema;User ID=chema;Initial Catalog=Guasa"
/>
</connectionStrings>
La página presenta un formulario solicitando login y password. Mediante un botón consultamos si existe un usuario con esos datos en la tabla Usuarios
using System.Data.SqlClient;
protected void
Button1_Click(object sender, EventArgs e){
// Este metodo imprime una tabla a pedal (Comando SELECT)
SqlConnection conexion = new SqlConnection("Data
Source=(local)\\SQLEXPRESS;Initial Catalog=usuario;Persist Security Info=true;
User ID=chema;Password=chema");
SqlCommand orden = new SqlCommand();
orden.CommandType = CommandType.Text;
orden.CommandText = "SELECT nombre,apellido,salario
FROM templa";
orden.Connection = conexion;
conexion.Open();
SqlDataReader todo = orden.ExecuteReader();
while (todo.Read()) {
String n
= Convert.ToString(todo[0]);
String a
= Convert.ToString(todo[1]);
double s
= Convert.ToDouble(todo[2]);
Response.Write(n
+ " " + a + " " + s + "<br>");
}
todo.Close();
conexion.Close();
}
protected void
Button2_Click(object sender, EventArgs e){
// Este metodo ejecuta un SQL distinto de SELECT (INSERT, DELETE, UPDATE)
SqlConnection conexion = new SqlConnection("Data
Source=(local)\\SQLEXPRESS;Initial Catalog=usuario;Persist Security Info=true;
User ID=chema;Password=chema");
SqlCommand orden = new SqlCommand();
orden.CommandType = CommandType.Text;
orden.CommandText = "UPDATE templa
SET salario=salario*1.1";
orden.Connection = conexion;
conexion.Open();
orden.ExecuteNonQuery();
conexion.Close();
}
using System.Data.SqlClient;
protected void btnLogin_Click(object sender,
EventArgs e) {
if (comprobarUsuario(this.txtUsuario.Text, this.txtClave.Text)) {
// Usuario correcto: Mandamos a la pagina por defecto (Default2.aspx)
System.Web.Security.FormsAuthentication.RedirectFromLoginPage(txtUsuario.Text,
false);
}
}
private bool comprobarUsuario(string nombre,
string clave){
try {
// Recuperamos los parametros de la BD
String Parametros = System.Configuration.ConfigurationManager.ConnectionStrings["conexionSQLServer"].ConnectionString;
// Conectamos
SqlConnection conexion = new SqlConnection(Parametros);
conexion.Open();
// SQL. Ejecutamos la consulta y recogemos el resultado
string consulta = "SELECT count(*) FROM Usuarios WHERE usuario='"
+ nombre + "' AND contrasena='" + clave + "'";
SqlCommand cmd = new SqlCommand(consulta, conexion);
int t = Convert.ToInt32(cmd.ExecuteScalar());
// Cerramos la conexión
conexion.Close();
// Si hay un usuario con ese nombre y contrasena lo metemos en sesión
devolvemos true. False si no hay ninguno
if (t == 1) {
Session["usuario"] = nombre;
return true;
}
else return false;
}
catch (Exception ex) {
// Por si hay errores, mostramos la pila de mensajes
Response.Write(ex.ToString());
return false;
}
}
Una vez correctamente identificados se nos redirige a Default2.aspx. En la página de identificación se ha metido el nombre de usuario en la sesión, por lo que es accesible.
Le damos a elegir los grupos a los que pertenece el usuario y mostramos todos los mensajes de ese usuario
Crear un SqlDataSource con la siguiente sintaxis (con QueryBuilder se realiza de manera sencilla)
Con la interrogación le indicamos que ese parámetro lo debe obtener de algún sitio. Cuando terminemos la consulta nos pedirá que lo definamos:
Le decimos que el usuario debe ser lo que exista en la variable de sesión correspondiente. Ahora basta crear un DropDownList cuyo origen sea precisamente el SqlDataSource recien creado. Habilitar el AutoPostBack para que cada vez que cambie el valor se muestren los datos del grupo elegido
Realizamos el mismo proceso anterior, pero para mostrar los mensajes del grupo elegido
Por último insertamos un GridView que muestre tabulados los datos de este SqlDataSource y se mostrarán los datos de la conversación elegida
Se añaden a la aplicación un boton y un cuadro de texto para enviar un mensaje al grupo que está seleccionado (ver el código de la aplicación)
protected void Button2_Click(object sender,
EventArgs e) {
// Recoge el nombre completo del pollo en cuestion (el de la sesion)
// Recuperamos de web.config la cadena de conexion con la BD
String Parametros = System.Configuration.ConfigurationManager.ConnectionStrings["conexionSQLServer"].ConnectionString;
// Conectamos con la BD
System.Data.SqlClient.SqlConnection conexion = new System.Data.SqlClient.SqlConnection(Parametros);
conexion.Open();
// A) Sacamos el numero del grupo donde estamos insertando -Ver nombre_Completo()
para comprender-
String consulta = "SELECT grupo FROM Grupos WHERE denominacion='"
+ DropDownList1.SelectedValue + "'";
System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(consulta,
conexion);
int grupo = Convert.ToInt32(cmd.ExecuteScalar());
// B) Ejecutamos el INSERT y cerramos
String sentencia = "INSERT INTO Mensajes (usuario,grupo,texto,fecha) values(";
sentencia += "'" + Session["usuario"] + "'," +
grupo + ",'" + TextBox1.Text + "','" + DateTime.Now + "');";
cmd = new System.Data.SqlClient.SqlCommand(sentencia, conexion);
cmd.ExecuteNonQuery();
conexion.Close();
// C) Actualizamos la tabla de mensajes y cerramos
GridView1.DataBind();
}
protected void Button1_Click(object sender, EventArgs
e) {
System.Web.Security.FormsAuthentication.SignOut();
System.Web.Security.FormsAuthentication.RedirectToLoginPage();
}
protected void Button3_Click(object sender, EventArgs
e) {
GridView1.DataBind();
}
Después de identificarse con uno de los usuarios existentes
en la base de datos, sale una tabla con las conversaciones entre los miembros
de los grupos. Sería necesario añadir la posibilidad de suscribirse a grupos,
creación de nuevos grupos, refresco automático, …