Ayer descubrí un link muy interesante de como detectar la versión de un archivo SDF sin necesidad de abrir una conexión a la base.
http://nativemobile.blogspot.com/2007/12/detecting-sdf-file-version.html
La técnica consiste en abrir el archivo como si fuera un binario común y leer una serie de caracteres del archivo en una posición determinada. Dependiendo de la marca que se encuentra en el archivo, es una versión diferente.
Porque complicarse la vida haciendo esto cuando podemos abrir la conexión, llamar a la propiedad ServerVersion del objeto SqlCeConnection?
Respuesta simple: No se puede abrir una base de SQL Server CE 3.1 usando las librerías de 3.5. Por lo tanto, si necesitamos hacer una aplicación que sepa trabajar con ambas versiones simultáneamente, antes de abrir la conexión, debemos averiguar la versión de la base para saber a qué versión de la librería de conexión a la base debemos instanciar.