Borra el archivo de la base de datos fisico del proyecto de visual y prueba a ejecutarlo para descartar que no te este dando problemas el "if (!File.Exists(mDbPath))"
Y no entiendo muy bien la ruta del archivo. Ahora tienes esto:
public static string mDbPath = Application.StartupPath + "" + "contactos.sqlite"
Y antes tenias esto:
string mDbPath = Application.StartupPath + "/Contactos.db";
No recuerdo mucho de las rutas pues era un tema bastante puñetero, pero me llama la atencion el cambio de la orientación de la barra (que lo mismo no tiene nada que ver).
Igualmente asegúrate que cuando ejecutes el ejecutable no tengas abierto el proyecto de visual o la base de datos desde un gestor, ya que si detecta que esta abierto por otro programa te lanza error.
Si te digo la verdad, creo que no sabría explicartelo bien. La cosa es que cuando lo tenía con la barra normal, es decir así /, en el proyecto se ejecuta bien y funcionaba, pero al momento instalar la aplicación en el sistema una vez ya compilada y todo, no cargaba la base de datos porque la ruta quedaba algo así:
Insertar CODE, HTML o PHP:
C:\Program Files\Contactos/database.sqlite
Entonces la aplicación no funcionaba obviamente porque no cargaba ni creaba ni nada la base de datos.
Ahí fue cuando me acordé de que la contrabarra se representa en C# con dos iguales y probé y funcionó. Utilicé un MessageBox para imprimir la ruta en pantalla y efectivamente ya estaba bien y funcionaba.
Mañana probaré de quitar el if File.Exists y lo que dices de no tener abierto el proyecto o la BD en un gestor, porque no recuerdo si eso lo hice o no. Si el problema estuviese en el if, ya no sé qué hacer para crear la base de datos sólo no exista, porque si dejo siempre puesto el parámetro new=true; me la sobreescribe y se borran todos los datos, claro.
Espero que no sea eso...
Un saludo!
Enviado desde mi SM-G925F mediante Tapatalk
- - - Actualizado - - -
Bueno, te comento.
He hecho varias comprobaciones y estoy ya 100% seguro de que la base de datos no puede estar en Archivo de programas porque no se puede escribir en ella. No tiene el atributo de Sólo lectura, pero seguro que es eso y te explico por qué...
El proyecto lo tengo ubicado en D:, mi disco duro secundario. Al probar la aplicación desde Visual Studio funciona perfectamente, se crea la base de datos, las tablas, todo bien.
Sin embargo, cuando instalas la aplicación en el sistema, es decir, la ubicación ya no es mi disco duro secundario, sino que es el C:, ahí es cuando no funciona. Entonces las dos comprobaciones que he hecho han sido las siguientes.
Primero he creado un método muy simple para comprobar que la BD se crea y lo he metido en el evento click de cualquiera de los botones. Al ejecutar la aplicación y darle al botón me lanza un True, o sea que la BD se crea y existe.
La segunda comprobación ha sido abrir la BD de la aplicación ya instalada, en el gestor de SQLite de Firefox y efectivamente el problema es que no se crea la tabla, no existe la tabla contactos, a diferencia de la que hay en la carpeta del proyecto que sí que la crea sin problemas.
Conclusión: el código no está mal, lo único que hay que cambiar es la ruta y poner que la BD esté en AppData y no en la carpeta de la aplicación porque ahí sí que podrá crear la tabla sin problema. La pregunta es CÓMO :grumpy: he leído mucho sobre eso y he visto ejemplos y casi siempre utilizan el método Path.Combine() que a mí no me funciona, entonces no sé cómo hacerlo...