viernes, julio 15, 2011

Que pasa cuando metes un iPhone dentro de una guitarra?

Me encontre con esto hoy y me parecio simplemente ESPECTACULAR. Como nota al margen; se ve que el tipo es super fan de Eric Clapton :)




jueves, julio 07, 2011

NETCF: Conectar con un servidor SQL Server remoto

En este blog he publicado varios posts relacionados con los problemas que se presentan a la hora de conectar una aplicacion de Windows Mobile con un servidor SQL Server mediante la red WiFi.

Ahora quisiera anadir uno mas para la lista. Resulta que en muchas redes, debido a alguna configuracion que desconozco, WM es incapaz de resolver un nombre de host, es decir, que si intentamos conectarnos con una cadena como esta:

Server=AdminServer;uid=sa;pwd=sasa;Database=SysData;

WM deberia ser capaz de resolver el nombre AdminServer y obtener su IP real. Como decia, esto no siempre es posible y, cuando WM no puede resolver el nombre, el resultado es el muy conocido error SQL Server Not Found.

Seguramente hay varias formas de resolver esto. En mi caso, opte por intentar resolver el nombre del server y, de ser necesario, solicitar al usuario el IP de dicho server. Con ambos datos, creo una entrada en el archivo Hosts del Windows Mobile a fin de asegurarme que siempre podra resolver el nombre del server, independientemente de la configuracion de la red.

Para hacer esto, necesitamos dos cosas:

a) Dado un nombre de host, como obtener su direccion IP:
using System.Net;
private string resolveHost(string host)
{
  string hostIP = string.Empty;
  try
  {
      IPHostEntry IPHost = Dns.GetHostEntry(host);
      hostIP = IPHost.AddressList[0].ToString();
  }
  catch (System.Net.WebException webEx)
  {
       MessageBox,Show(webEx.Message);
  }
  catch (System.Exception othEx)
  {
       MessageBox.Show(othEx.Message);
  }

  return hostIP;
}

b) Habiendo obtenido el IP, bien sea por resolucion del host o porque el usuario lo indico, procedemos a crear una entrada en el archivo Hosts (que en WindowsMobile se maneja a nivel del Registry):
using Microsoft.Win32;

string hostName = "AdminServer";
string hostIP = "192.168.2.2";
string regKeyName = "HKEY_LOCAL_MACHINE\\Comm\\Tcpip\\Hosts\\" + hostName;
byte[] regKeyValue = System.Net.IPAddress.Parse(hostIP).GetAddressBytes();
Registry.SetValue(regKeyName, "ipaddr", regKeyValue, RegistryValueKind.Binary);


Otro As bajo la manga a la hora de resolver este problema tan molesto.


ODBC: Error raro con Windows 2008 x64

Bueno, la historia es mas o menos así: un sistema hecho en VFP 6, utiliza SQL Server 2008 R2 como motor de datos y ODBC como via de comunicación. Específicamente, estaba usando el driver SQL Server Native Client 10.0 que se instala con el SQL Server 2008.

En las pruebas del programa en mi equipo (Windows XP 32bits) todo funcionaba perfecto. Pero cuando fuimos a instalar en el cliente (Windows 2008 Std x64), empezamos a obtener este error cada vez que el programa intentaba invocar un Stored Procedure:

1526 Connectivity error: Unable to retrieve specific error information. Driver is probably out of resources.

Después de leer varios posts, la única conclusión que pude sacar es que el problema se debía a algún tipo de problema con el driver ODBC de SQL Server, en parte por lo indicado en este post, que aunque específicamente no aplica a este caso particular (yo no estaba pasando ningún parámetro tipo text), ciertamente arrojaba alguna luz sobre el posible origen del problema.

Dado que no tenia muchas mas opciones, decidí intentar usar el antiguo driver SQL Server que usaba para conectarme con SQL Server 2000.... y voila! resulta que con ese driver todo empezó a funcionar como se esperaba.

Quiero llamar la atención sobre el hecho de que el problema se presento SOLAMENTE en el Windows 2008 Std corriendo a 64bits, pues luego hicimos pruebas con un servidor Windows 2008 std pero a 32 bits, usando el driver SQL Server Native Client 10.0, y todo funciono perfectamente.

En fin, para que lo tengan en cuenta si por casualidad le pasa lo mismo.