Cómo hacer una página que cierre la sesión

Para cerrar sesión en una aplicación de ASP.NET puedes utilizar el control LoginStatus, sin embargo en ocasiones querrás que esto ocurra al acceder una página, por ejemplo CerrarSesion.aspx.  Para hacerlo coloca lo siguiente en el code-behind de dicha página:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
   FormsAuthentication.SignOut()
   Session.Clear()
   Session.Abandon()
   Response.Redirect(FormsAuthentication.LoginUrl)
End Sub

Y listo, con eso cierras la autenticación, limpias y abandonas la sesión, y redireccionas a la página de login.

Cómo desbloquear un archivo o carpeta en Windows

Esto no es frecuente, pero en ocasiones Windows bloquea una carpeta o un archivo, de tal forma que cuando se intenta modificar su nombre o eliminarlo, aparece la advertencia: “La acción no se puede completar porque otro programa abrió la carpeta o uno de sus archivos. Cierre la carpeta e inténtelo de nuevo”.

Si efectivamente tienes la carpeta o alguno de sus archivos abierto, ciérrala. Sin embargo en ocasiones tenemos todo cerrado y aún así­ se muestra este problema. Para solucionarlo tenemos que cerrar el proceso que tiene bloqueada la carpeta.

Para ello necesitaremos descargar el programa Process Explorer de esta liga. Este programa es gratuito. No se instala, solamente descomprí­melo en una carpeta y haz doble clic en el archivo “procexp.exe”.  Es posible que tengas que ejecutar el programa como administrador.

Una vez que abra el programa, haz clic en el icono de Encontrar.

Ahora teclea el nombre de la carpeta que está bloqueada y oprime “Search”. Después haz clic en la entrada encontrada y esto marcará un renglón en la ventana principal, haz clic con el botón derecho y selecciona “Kill Process”.

Se te preguntará si estás seguro, haz clic en “Sí” y listo, queda desbloqueada la carpeta, ahora la puedes modificar a tu gusto.

Saving changes is not permitted en SQL Server

Trabajando en una instalación limpia de SQL Server Management Studio, si intentas modificar la estructura de una tabla, puedes encontrarte este error al intentarla guardar:

Saving changes is not permitted. The changes you have made require the following tables to be dropped and re-created. You have either made changes to a table that can't be re-created or enabled the option Prevent saving changes that require the table to be re-created.

Si oprimes Cancel, no se guarda ningún cambio.

La solución es muy sencilla, abre Microsoft SQL Server Management Studio y haz clic en el menú Tools, y luego en Options.

Después en la columna izquierda selecciona Designers y desmarca la casilla Prevent saving changes that require table re-creation.

Y listo, ahora podrás modificar tu tabla y guardar los cambios.

Cómo mantener la posición vertical de una página después de un PostBack

En ocasiones tenemos un control de ASP.NET (por ejemplo un DataGrid o un DataPager) que está posicionado verticalmente en la mitad de una página, lo que significa que el visitante tuvo que haber desplazado la barra de desplazamiento (scrollbar) hacia abajo para llegar a ese punto.

Si este control realiza un PostBack, cuando la página regresa al navegador, se muestra la parte superior de la misma, sacando al visitante de contexto ya que tendrí­a que volver a utilizar la barra de desplazamiento para visualizar el control. Esto no es nada amigable.

Para mantener la posición después del postback, utiliza el siguiente atributo en pages en web.config:

<pages maintainscrollpositiononpostback="true">

O bien, en la declaración de la página:

<%@ Page MaintainScrollPositionOnPostback="true" %>

User, group, or role already exists in the current database.

Seguramente te ha pasado que al migrar una base de datos de SQL Server de un servidor a otro, haces tu backup usando Microsoft SQL Server Management Studio, transfieres el archivo, y haces el restore en el nuevo servidor. Todo parece perfecto, pero cuando vas a crear tu usuario obtienes el siguiente error:

User, group, or role '' already exists in the current database. (Microsoft SQL Server, Error: 15023)

Entonces expandes tu base de datos, vas al nodo Security -> Users, buscas el usuario, y lo intentas borrar, pero entonces aparece otro error:

Drop failed for User ''. (Microsoft.SqlServer.Smo). The database principal owns a database role and cannot be dropped. (Microsoft SQL Server, Error: 15421)

En este punto te das cuenta de que el usuario está “huérfano” (orphaned), y una solución para darle la vuelta al problema es crear un nuevo usuario con otro nombre, asignarlo a la base de datos, y modificar el nombre del usuario en el Connection String de tu aplicación.

Pero existe una manera de solucionar las cosas correcta y fácilmente.

Abre una ventana de query en tu base de datos y teclea lo siguiente para ver los usuarios huérfanos:

EXEC sp_change_users_login 'Report'

Si ves a tu usuario ahí significa que efectivamente está huérfano y para deshuerfanizarlo 😉 teclea lo siguiente:

EXEC sp_change_users_login 'Auto_Fix', 'user'

Modificando user por el nombre de tu usuario.

Y listo, asunto totalmente solucionado, no tienes que crear nuevos usuarios ni modificar las Connection Strings de tus aplicaciones.

Por último, si quieres crear un nuevo usuario para esta base de datos, usa:

EXEC sp_change_users_login 'Auto_Fix', 'user', 'login', 'password'