miércoles, septiembre 29, 2010

Otra de Microshit!!

Hoy tuve la "dicha" de intentar instalar el SQL Server 2008 Managment Studio Express en mi equipo con Windows XP SP2.

Resulto que el ejecutar las reglas de validacion de la instalacion saltaron dos problemas de esos en los que M$ es especialista.

1) Falla en la regla Sql2005SsmsExpressFacet, incluso despues de haber desinstalado el SQL Server 2005 Managment Studio Express. La solucion a esto fue modificar en el register la clave HKEY_LOCAL_MACHINE\SOFTWARE\Microsfoft\Microsoft SQL Server y renombrar la clave "90" temporalmente durante la instalacion.

2) Falla en la regla VSShellInstalledRule, relacionado con no tener instalado el SP1 de Visual Studio 2008. Con lo delicado que es el VS2008 la verdad no tenia mucho interes en instalar el fulano SP1, asi que la solucion paso por dos pasos:

a) Ejecutar el instalador del Managment Express manualmente e indicarle que ignorara esa regla:

SETUP /ACTION=install /SkipRules=VSShellInstaled RebootRequiredCheck

b) Cambiar en el register el valor de la clave HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DevVis\VS\Servicing\9.0\SP segun como se indica aqui

Una vez finalizada la instalacion, se reversan los cambios hechos en el register y listo.


viernes, septiembre 24, 2010

C#: Constructor implicito vs Contructor Explicito

Al crear una instancia de una clase o estructura, generalmente se utiliza el constructor implícito, mediante la siguiente sintaxis:

MyClass var = new MyClass();

En el caso de las clases, es posible personalizar el constructor mediante la sintaxis:

public MyClass()
{
// Aqui va el codigo de inicializacion de la clase
}

Pero en el caso de las estructuras, C# no permite crear un constructor sin parámetros, lo cual nos obligaría a incluir un parámetro "dummy" solo para saltar esta restricción:

public MyStruct(object foo)
{
// Aqui va el codigo de inicializacion
}

MyStruct var = new MyStruct(null);

Para evitar esto, podemos hacer uso de la clausula "static" para crear un constructor personalizado, el cual no requiere que se le indique ningún tipo de parámetro.

public static MyStruct New()
{
MyStruct obj = new MyStruct();
obj.Prop1 = 0;
obj.Prop2 = string.Emtpy;

return obj;
}

luego, podemos crear nuestra instancia perfectamente inicializada mediante la sintaxis:


MyStruct var = MyStruct.New();

Aun mejor, esta solución nos permite sobrecargar el constructor explicito con distintas variaciones, de acuerdo a las necesidades (cosa que no es posible con el constructor implícito).




viernes, agosto 06, 2010

WM: Otra del emulador

Apenas hace dos días pude por fin encontrar solución al problema de conexión entre mi emulador de WM6 y mi SQL Server 2005... pues hoy, de la nada, me encontré con este error al intentar instalar mi aplicación en el emulador desde el VS2008:

Error 1 The device security configuration disallowed the connection. Ensure that you have the appropriate certificates on your device for development. Review your SDK documentation for proper security settings for connecting to this device. Device Connectivity Component

Después de leer una docena de artículos que hablaban desde cambiar unos valores en el registry del emulador, hasta instalar unos certificados de seguridad y demás, encontré mi propia solución: hacer un soft reset del emulador!!!

Asi que se cumple la máxima suprema de la computación: cuando algo no funcione, REINICIELO!!!


miércoles, agosto 04, 2010

WM: Una nueva luz al problema "SQL Server not found"

Después de casi cuatro años de haber empezado mi primer proyecto con Windows Mobile... y descubrir la HORRIBLE realidad de lo difícil que puede llegar a ser lograr que el emulador de Windows Mobile se conecte a una instancia de SQL Server corriendo en tu equipo, POR FIN, encontré algo que parece solucionar definitivamente el problema.

Para los que apenas se están empezando a topar con esta realidad, o para las que ya la han sufrido y aun no entienden bien cual es el problema, he aqui lo que he aprendido en estos cuatro años:

1. Debes desactivar el firewall de Windows o al menos asegurarte que no esta bloqueando el puerto que este utilizando SQL Server, normalmente el 1433.

2. Debes asegurarte que tu instancia de SQL Server, especialmente si es una versión Express, este preparado para aceptar conexiones remotas. En Google es fácil encontrar los pasos para poder activar esto.

3. Si por casualidad tienes varias instancias de SQL Server corriendo simultáneamente en tu equipo, JAMAS LOGRARAS QUE EL EMULADOR SE CONECTE. Porque? la verdad aun no lo se, pero este era mi caso, y era la causa por la que, a pesar de tener todo perfectamente configurado, me era imposible establecer la conexión. La solución? detener todas las instancias de SQL Server a excepción de la que necesitas usar con el emulador. Probablemente haya alguna forma de evitar esto, pero aun no la he encontrado.

4. Todo lo que se necesita para conectar el emulador a tu equipo es "ponerlo en la cuna" o "cradle", que en el caso del emulador, se puede hacer a través del Device Emulator Manager.

5. Para poder conectarte al SQL Server desde el emulador SIN necesidad de hacer cradle, debes instalar en tu equipo el Microsoft Loopback Adapter y luego configurar la tarjeta de red del emulador para que se conecte con ese adaptador.