2010-09-13 27 views
5

Tengo una base de datos (servidor SQL compacto) en un archivo * .sdf. Convertí un proyecto de marco compacto en un proyecto de PC normal y, por algún motivo, con el mismo código y el mismo archivo * .sdf se lanzó la siguiente excepción: "el nombre del archivo no es válido. base de datos "cadena de conexión sql problema

Lo raro es que en mi PC - la subcadena" archivo: \ "se agregó a mi cadena de conexión original y esa es probablemente la razón por la cual se lanza la excepción. cuando elimino la subcadena "file: \" durante el modo de depuración, en el tiempo de ejecución, la excepción no se produce.

¿por qué se agregó esta subcadena? ¿De dónde viene? y ¿cómo puedo resolver este problema?

Recientemente descubrí que puede haber algo de conexión con el hecho de que falta el archivo app.config. Esto todavía no explica cómo existe la cadena de conexión original, solo con su subcadena añadida.

Por favor ayuda. gracias de antemano

+0

¿El archivo sdf es local? En una subcarpeta? ¿Dónde está? ¿Puedes dar un ejemplo de cómo se ve tu cadena de conexión? – curtisk

+0

Sí, es local. Se encuentra en "C: \ solutionname \ projectname \ bin \ debug \ sdfname.sdf" la cadena de conexión: "file: \\ C: \\ solutionname \\ projectname \\ bin \\ debug \\ sdfname.sdf " – George

Respuesta

0

Desde Windows CE no tienen un "directorio actual", las implementaciones por lo general obtener la ubicación del ensamblado actualmente en ejecución como un directorio que debe buscar. En una computadora de escritorio, la cadena devuelta por Assembly.GetExecutingAssembly().GetName().CodeBase incluye el prefijo esquema .

+0

¿Qué es Assembly.GetexecutingAssembly(). GetName(). CodeBase? y cómo puedo solucionar ese problema? – George

+0

Si ingresa "sdfname.sdf", entonces el proceso de apertura de ese archivo deberá resolverlo, por ejemplo, "c: \ somefolder \ sdfname.sdf". En las máquinas de Windows, los desarrolladores suelen suponer que el archivo está en la carpeta actual, pero como Windows CE no tiene una "carpeta actual", los desarrolladores de CE usualmente usan la ruta del ensamblado. –

+0

En Windows CE, esta función devuelve una ruta que puede usar sin modificaciones para abrir un archivo, mientras que en el marco completo se agrega un prefijo de esquema (archivo: \\\). No sé dónde ocurre esta conversión de relativa a absoluta, si está en una biblioteca de terceros podría ver si tienen una versión de marco completo que puede usar en lugar de la versión CF. –

1

No veo por qué necesitarías "file: //". Debería funcionar sin eso muy bien. Para asegurarse de que se ve mal, tiene el archivo: \ en lugar de file: //

+0

tal vez no me explique correctamente ... el prefijo "file: \" se agregó automáticamente por sí mismo - No lo agregué. Es por eso que la excepción es lanzada (no por mí, por el marco). No tengo idea de por qué sucede eso. Me gustaría encontrar el origen de ese prefijo y entender por qué sucede eso, pero ahora incluso me gustaría encargarlo de eliminarlo directamente en tiempo de ejecución antes de llamar a la función que arroja la excepción. Lamentablemente, la cadena de conexión es privada y, debido a eso, no tengo acceso a ella. – George

+0

Lo dejaste claro, simplemente no lo leí correctamente. Su cadena de conexión debe ser: "Fuente de datos = c: \ db.sdf". – Bryan