martes, 21 de octubre de 2008

ArrayList y ToArray()

Algunas veces necesitamos hacer algunas cosas un poco, digamos, extrañas. Por ejemplo supongamos que estamos usando una "caja negra" con un método que utilice un arreglo de Objetos ya definidos, utilicemos de ejemplo el objeto Autmovil. La firma sería algo mas o menos asi:

public void Ensamblar(Automovil[] automoviles)

Pero nosotros por alguna extraña razón, de esas que se dan en la informática, no podemos determinar de antemano cuantos instancias de Automovil vamos a enviarle al método. Por ejemplo asumamos que tenemos que hacer un recorrido de los seleccionados por el usuario, y no queremos realizar el recorrido dos veces (una para determinar el número y la segunda para cargar los objetos en el arreglo). Por lo tanto no podemos definir el tamaño del arreglo de antemano.

Una de las soluciones es utilizar ArrayList.

ArrayList ListaAutomoviles = new ArrayList ();

Así durante un solo recorrido de lo elegido por el cliente llenamos las propiedades de cada objeto Automovil (instanciado, digamos, Auto) y utilizamos la instrucción ListaAutmoviles.Add(Auto) para llenarlo. Finalmente podemos utilizar algo similar :

Autmovil[] Autos = (Autmovil [])ListaAutomoviles.ToArray(typeof(Autmovil));

Con esto creamos el arreglo tal y como nos lo pide la firma del método en cuestión. Probablemente no sea el mejor ejemplo, pero al menos muestra como funciona el método ToArray() del ArrayList.

Leia Mais…

viernes, 10 de octubre de 2008

Una de MP3 Player

Resulta que hace como un año que tengo un SANSA e280 v2 de 8Gb, el aparatito tiene varias características agradables como la grabadora de voz y el radio FM, en fin... se había comportado muy bien el reproductor hasta hace poco.

Entonces me sucedieron un par de inconvenientes: primero, sin razón aparente, se apagó y no quiso volver a encender, ni conectando el cable para cargar ni nada y segundo mi pc dejó de reconocerlo.

"A la madre que lo parió" pensé yo, pero oh bendita santa Internet! patrona de todos aquellos que no leemos manuales de dispositivos electrónicos que nos sacas de nuestra ignominiosa ignorancia. He aquí las soluciones para ambos Casos:

- El Sansa e280 no enciende:
. Presionar el boton de encendido por 10 segs. (ma o meno) mientras al mismo tiempo también deja presionada una de las direccionales (yo presione la de la izquierda) y ... chan chan! santo remedio encendió el aparatejo, de hecho si tienes los audífonos puestos oirás un leve clic que indica que el animalito reaccionó.

- La PC no reconoce el Sansa e280:
. Apagar el aparato.
. Bloquear el reproductor(mover el switch de manera que quede expuesta la parte naranja)
. Tener lista en la PC la ventana con "Mi PC" seleccionada de manera que puedas ver las unidades disponibles.
. Dejar presionado el botón de grabación y conectar a la computadora.
. Mantener el botón de grabación presionado hasta que aparezca disponible la unidad de Sansa.

Como lo he dicho los dos métodos me funcionaron satisfactoriamente.

Así que puede volver a oír Power Metal!!!

Leia Mais…

miércoles, 8 de octubre de 2008

SQL SERVER y usuarios huérfanos

Algunas veces, especialmente cuando hacemos respaldos de una base de datos y nos la llevamos para otra máquina para hacer el restore, nos damos cuenta que el usuario que utilizábamos no existe, ha quedado huérfano.

He aquí como recomponer el asunto, desde como crear el Login USRBD1 linkearlo con el usuario USRBD1, todo en una base de datos llamado BD1

1-Se crea el login USRBD1 con su password correspondiente

USE [BD1]
GO
   CREATE LOGIN [USRBD1] WITH PASSWORD=N'PASSW@RD1', DEFAULT_DATABASE=[BD1],
       CHECK_EXPIRATION=OFF, CHECK_POLICY=ON
GO


2- Se crea el usuario y se asocial al login creado anteriormente
USE [BD1]
GO
   CREATE USER [USRBD1] FOR LOGIN [USRBD1]
GO
   USE [BD1]
GO
   ALTER USER [USRBD1] WITH DEFAULT_SCHEMA=[USRBD1]
GO

USE [BD1]
GO
   CREATE SCHEMA [USRBD1] AUTHORIZATION [USRBD1]
GO

3-Se le asigna el rol de owner
USE [BD1]
GO
EXEC sp_addrolemember N'db_owner', N' USRBD1'
GO


4- ESTA ES LA LINEA MAGICA – con esta se reparan los usuarios huérfanos
EXEC sp_change_users_login 'Auto_Fix', ' USRBD1'

Gracias a Pigosky, Tito kun y Allan Senpai

Leia Mais…

ThreadAbortException Response.Redirect

Gracias a Pigosky, un geniecillo de la informática, que me pasó este artículo donde se trata el error producido por el Response.Redirect o el Server.Transfer.

Resumiendo se produce porque el Response.Redirect() internamente llama a Response.End() que a su vez llama a Thread.Abort() lo que produce el error.

Para resolver esto usamos el método con el segundo parámetro en false, o sea:

Response.Redirect(mipagina.aspx, false) ;
Con esto evitamos que se llame a Response.End(). Si bien esto resuelve en la mayoría de lo casos el error, es más seguro y eficiente añadir inmediatamente después la linea:
HttpContext.Current.ApplicationInstance.CompleteRequest();
para dar por finalizado el request de la pagina y que ésta no se siga dibujando ni ejecutando.

Ademas como indica el articulo es recomendable hacer override de los métodos RaisePostBackEvent y Render aunque esto último no es tan necesario.

Leia Mais…