viernes, 10 de mayo de 2013

Manejo de sesiones en ASP.NET

Podemos crear un fichero de formulario con dos controles Edit y un botón

fichero: login.aspx

tendrá un aspecto mas o menos así:



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

<!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>Logado</title>

<link href="StyleSheet1.css" type="text/css" rel="stylesheet" />

</head>

<body>

<form id="form1" runat="server">

<div>

 
<asp:Panel ID="Panel1" runat="server" Height="156px" BackColor="#5599FF">

<div style="text-align:right"><h2>Alba Informática S.C.I.</h2></div>

</asp:Panel>

 
</div>

<div>

<asp:Panel ID="Panel2" runat="server" CssClass="panel">

<div>&nbsp;</div>

<div class="textos">Codigo</div>

<div>

<asp:TextBox ID="TextBox2" runat="server" Width="282px" CssClass="controles"></asp:TextBox>

</div>

<div>&nbsp;</div>

<div class="textos">Password</div>

<div>

<asp:TextBox ID="TextBox3" runat="server" Width="282px" CssClass="controles"></asp:TextBox>

</div>

<div>&nbsp;</div>

<div>

<asp:Label ID="lblSms" runat="server" CssClass="textos" Text="Bandeja de notificaciones"></asp:Label>

</div>

 
<div>&nbsp;</div>

<div>

<asp:Button ID="Button1" runat="server" CssClass="botones" OnClick="Button1_Click" Text="Login" Width="91px" />

</div>

<div>&nbsp;</div>

 
</asp:Panel>

</div>

</form>

</body>

</HTML>

Pues bien desde el evento Button1_Click que hemos definido previamente
podemos poner un código que valide los datos y nos redireccione a otra web o bien nos muestre un mensaje con lo que ha sucedido.

protected void Button1_Click(object sender, EventArgs e)

{
string codigo = TextBox2.Text; //leemos el contenido de cada control edit

string password = TextBox3.Text;

if (codigo == "sa") //si en el primer control hemos escrito "sa"
{Session["logado"] = true;  //crea una variable de sesion (visible en todas las webs)

Response.Redirect("articulos.aspx") //redireccionamos a otra web
}else
{ lblSms.Text = "Datos incorrectos. Intentenlo de nuevo por favor.";
}
}



En el fichero articulos.aspx


Validamos que tengamos acceso a la web (que se exista una variable de sesión con el valor correcto) en otro caso obligamos a que se logue redireccionándolo a la web de logado.

Esta validación se tendrá que incluir en todas paginas que queramos que no se acceda sin logarse previamente

protected void Page_Load(object sender, EventArgs e)

{
//IMPORTANTE. Cuando se lee una variable de sesión
//hay que realizar una conversión de tipos (casting) al tipo del valor que almacena
//en este caso es un boolean por esto se hace (bool) delante de la variable de sesion
 
if ((Session["logado"] == null) || ((bool)Session["logado"] == false))

{
 
Response.Redirect("login.aspx");


}






 



Error de conexion con la BD SQLSERVER desde Visual Studio 2012

A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)



have seen many developers facing the above error on forums, hence I decided to explain the causes of the same.
Below is a Sample connection string
<connectionStrings>
    <add name="conString"
       connectionString="Data Source=MCN-1\SQLExpress;
                         database=Northwind;
                         Integrated Security=true" />
</connectionStrings>
 
One of the causes of this error comes in the incorrect connection string.
Mainly one should check.
1. Data Source or Server Name or IP address is Correct. For example here MCN-1. You can also put a .(dot) instead of machine name. For
    example .\SQLExpress
2. If any instance used check whether the instance name is correct. For example here SQLExpress
3. If any remote connections check if there is some firewall installed if yes disable it.
4. Also check if remote connections are configured in SQL Server. To configure SQL Server to allow remote connections read here. This article
    also explains how to create an exception in firewall in order to allow remote connections.
 
Finally also make sure that the SQL Server Service is running on the system. If it is stopped start it
The above helped me solve my issue. If someone else has anything other than above please feel free to share.

jueves, 9 de mayo de 2013

Editar el archivo hosts en Windows

Una de las funciones del archivo hosts es bloquear o permitir las paginas de internet según sea tu necesidad.

El archivo hosts desde Windows XP hasta Windows 7 se encuentra en la ruta:

C:\Windows\System32\drivers\etc
Para modificar este archivo en las versiones anteriores a Windows 7 solo se accede a esta ruta, se abre el archivo, se modifica y se guardan los cambios.

Pero en Windows 7 este procedimiento no funciona, al tratar de guardar los cambios el sistema muestra una ventana en donde dice que no se puede guardar en ese directorio por lo que sugiere guardar una copia en Mis Documentos. Para modificarlo aquí se dejan los pasos:

1) Si es necesario se deberán Mostrar todos los archivos y carpetas ocultos.

2) Localiza el "Bloc de notas" y no lo abras con doble clic si no haciendo clic derecho y hacer clic en la opción Ejecutar como administrador:



El sistema te preguntará si quieres permitir la ejecución a lo que debes decirle que si.

3) Una vez abierto el Bloc de notas ir a Archivo --> Abrir:



Accedemos al archivo hosts siguiendo su ruta: C:\WINDOWS\system32\drivers\etc

Al llegar a etc no veremos el archivo hosts, para tener acceso a él debemos seleccionar en el desplegable Todos los archivos como se muestra en la imagen:



4) Se selecciona hosts y clic en Abrir:



Una vez abierto podremos editar el archivo hosts según nuestras necesidades. En la imagen se ve un ejemplo de como se bloquea una pagina y el dominio después de 127.0.0.1 escribes el nombre de la pagina con www
y en otra linea lo mismo sin www.



Solo nos queda guardar los cambios.


martes, 7 de mayo de 2013

Un magnífico editor de código libre que soporta varios lenguajes

Muy recomendado, un editor de código libre con muchísimas funcionalidades y con soporte para plugins que incrementan aun más su potencia:

la web oficial del editor es http://notepad-plus-plus.org/

viernes, 3 de mayo de 2013

Conectar ASP.Net con OLEDB

private void Page_Load(object sender, System.EventArgs e)
{
OleDbConnection conn;
OleDbCommand comm;
OleDbDataReader dr;
conn = new OleDbConnection("Provider = Microsoft.Jet.OLEDB.4.0; Data Source = C:\\database.mdb");
comm = new OleDbCommand("Select * from emp",conn);
conn.Open();
dr = comm.ExecuteReader();
DataGrid1.DataSource = dr;
DataGrid1.DataBind();
conn.Close();
}

jueves, 2 de mayo de 2013

AJAX con ASP.Net


 
 
 

Introducción

Hasta ahora, hemos aprendido a crear páginas web que utilizan el modelo postback. Con el postback, las páginas están perpetuamente reenviándose al servidor web y regenerándose.
Como desventaja del modelo postback tenemos que hay un parpadeo del contenido de la página cuando tiene que refrescarse. Además se tiene el problema que se reenvían todos los datos al servidor.
Recientemente, una nueva generación de aplicaciones web ha comenzado a aparecer que se comportan más como las aplicaciones de Windows que las tradicionales páginas web. Estas aplicaciones se refrescan en forma rápida y sin parpadeos. Entre los ejemplos notables incluyen el correo electrónico basado en web como Gmail y aplicaciones de la cartografía como Google Maps.
Esta nueva generación de aplicaciones web utiliza un conjunto de prácticas de diseño y tecnologías conocidas como Ajax.
Una de las características fundamentales de Ajax es la capacidad para actualizar parte de la página, mientras que deja el resto intacto.
AJAX son las siglas de Asynchronous JavaScript And XML. No es un lenguaje de programación sino un conjunto de tecnologías (HTML-JavaScript-CSS-DHTML-PHP/ASP.NET/JSP-XML) que nos permiten hacer páginas de internet más interactivas.
La característica fundamental de AJAX es permitir actualizar parte de una página con información que se encuentra en el servidor sin tener que refrescar completamente la página. De modo similar podemos enviar información al servidor.
Veremos como ASP.Net nos esconde la complejidad de Ajax y nos permite una fácil transición entre aplicaciones web tradicionales y el nuevo modelo.

ASP.NET AJAX

Hay una variedad de formas de aplicar el Ajax en cualquier aplicación Web, incluyendo ASP.NET. Para ponerlo en práctica Ajax sin utilizar librerías, es necesario que se tenga una comprensión profunda de JavaScript, porque es el lenguaje JavaScript el que se ejecuta en el navegador, que solicita la nueva información del servidor web cuando sea necesario y la actualización de la página en consecuencia.
Si bien JavaScript no es terriblemente complejo, es muy difícil de programar correctamente, por dos razones:- La aplicación de los principales detalles de JavaScript varía de navegador a navegador, que significa que necesita una enorme cantidad de experiencia para escribir una buena página web que se ejecuta igual de bien en todos los navegadores.
- JavaScript es un lenguaje muy laxo que tolera muchos pequeños errores. La captura de estos errores y la eliminación de ellos es un proceso tedioso. Aún peor, el error puede ser fatal en algunos navegadores y dañina en otros, lo que complica la depuración.
En este capítulo, usted NO va a usar JavaScript directamente. Por el contrario, utilizará un modelo de nivel superior llamado ASP.NET AJAX.
ASP.NET AJAX le da un conjunto de componentes del lado del servidor y los controles ASP.NET tradicionales que puede utilizar en el diseño de su página web. Estos componentes hacen automáticamente todos el código JavaScript que necesita para obtener el efecto deseado. El resultado es que puede crear una página con Ajax. Por supuesto, usted no obtendrá el máximo control para personalizar hasta el último detalle de su página, pero usted recibirá una gran funcionalidad con un mínimo de esfuerzo.

Extensiones Ajax

El Visual Studio .Net 2008 agrega una pestaña que agrupa los controles referidos a Ajax:
Para poder utilizar ASP.NET AJAX es necesario un control de tipo ScriptManager. Este control es el cerebro de ASP.NET AJAX, Cuando disponemos un control de tipo ScriptManager en el formulario aparece un cuadro gris, pero cuando ejecutemos dicha página no aparecerá, es decir el control ScriptManager no genera etiquetas HTML.
El control ScriptManager genera todo el código JavaScript necesario para las llamadas asíncronas desde el navegador al servidor web.
Cada página que utiliza ASP.NET AJAX requiere solo una instancia de la clase ScriptManager, indistintamente la cantidad de regiones que vallamos a actualizar posteriormente.

Refresco parcial de página.

Confeccionaremos un problema sin utilizar AJAX y luego lo resolveremos utilizando AJAX y veremos las ventajas que presenta.
El problema a resolver es mostrar un video del sitio de youtube.com, dispondremos un botón que cuando se presione recuperará los comentarios existentes para dicho video (para hacer el problema más corto evitaremos extraer los comentarios de una base de datos)
Creamos un sitio web y disponemos en vista de código las marcas HTML que nos provee el sitio youtube.com para insertar en nuestra página el video. Luego la página Default en vista de código queda:
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>

<!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>

<object width="425" height="344">
<param name="movie" value="http://www.youtube.com/v/Gi61DAYGIkE&hl=es&fs=1&"></param>
<param name="allowFullScreen" value="true"></param>
<param name="allowscriptaccess" value="always"></param>
<embed src="http://www.youtube.com/v/Gi61DAYGIkE&hl=es&fs=1&" 
type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" 
height="344"></embed>

    </object>
    <form id="form1" runat="server">
    <div>
        
    </div>
    </form>
</body>
</html>
Después del bloque del body hemos dispuesto el código suministrado por youtube.com Ahora en vista de Diseño agregamos un Button y una Label.:
El código a implementar al presionar el botón es:
Partial Class _Default
  Inherits System.Web.UI.Page

  Protected Sub Button1_Click(ByVal sender As Object, ByVal e As _ 
     System.EventArgs) Handles Button1.Click
       
 Me.Label1.Text = _
     "1 - Muy buen video. <br> 2 - Correcto. <br>3 - De lo mejor."
    
  End Sub
End Class
Es decir cargamos el contenido de la Label con los comentarios. Como podrán ver al ejecutar la aplicación si estamos viendo el video y presionamos el botón de “Ver comentarios” el contenido de la página se recarga, es decir debemos comenzar de nuevo a ver el video (esta situación es poco agradable para el visitante del sitio)
Ahora crearemos otra página y utilizaremos ASP.NET AJAX para no tener que refrescar toda la página sino la Label donde deben aparecer los comentarios.
Creamos una segunda página (Default2.aspx), agregamos también el código suministrado por youtube.com.
Debemos primero insertar un objeto de la clase ScriptManager y un objeto de la clase UpdatePanel. Todo lo contenido en el control UpdatePanel se refrescará sin tener que recargar la página por completo. Disponemos entonces dentro del UpdatePanel1 la Label y el botón para “Recuperar comentarios”, la interface visual creada es:



Para el evento click del botón realizamos el mismo código hecho para la página anterior:
Partial Class Default2
    Inherits System.Web.UI.Page

   Protected Sub Button1_Click(ByVal sender As Object, _
     ByVal e As System.EventArgs) Handles Button1.Click
     
     Me.Label1.Text = _
       "1 - Muy buen video. <br> 2 - Correcto. <br>3 - De lo mejor."

    End Sub
End Class
Si ejecutamos la página Default2.aspx veremos que la experiencia del usuario visitante será mejor. Probemos de iniciar el video y luego presionar el botón “Ver comentarios”, como observaremos el video no se detiene y luego de un corto tiempo tenemos en la página los comentarios dispuestos en dicho video.
La idea básica es dividir su página web en una o más regiones distintas, cada una de las que se envuelve dentro de un UpdatePanel invisibles en tiempo de ejecución. Cuando un evento ocurre en un control que se ubicado dentro de un UpdatePanel, y este evento normalmente desencadena una página completa postback, el UpdatePanel intercepta el evento y realiza una llamada asincrónica. Aquí está un ejemplo de cómo esto sucede:
1. El usuario hace clic en un botón dentro de un UpdatePanel.
2. El UpdatePanel intercepta en el lado del cliente el clic.
Ahora, ASP.NET AJAX realiza una llamada al servidor en lugar de una página completa postback.
3. En el servidor, se ejecuta su ciclo de vida en forma normal, con todos los eventos habituales.
4. ASP.NET AJAX recibe todo el HTML y se actualiza cada UpdatePanel y los cambios que no están dentro de un UpdatePanel se ignoran.

Fuente de información: http://www.aspnetya.com.ar/detalleconcepto.php?codigo=73

Jesús Moreno - Ingeniero Ténico Informático - consultor Informático

Hola, soy Jesús Moreno Ingeniero Técnico Informático en sistemas por la US y propietario de éste blog. Mi trabajo en los ultimos años se ...