2011-02-15 14 views
12

Necesito configurar en la aplicación.config la cadena de conexión sqlite. Quiero establecer la ruta relativa a las carpetas de depuración/liberación, el archivo de la base de datos se copiará en esas carpetas.App.config cadena de conexión ruta relativa

<add name="EmailsSQLite" connectionString="data source=c:\Users\Test\Documents\Visual Studio 2008\Projects\TestConsole\Emails\data\EmailDatabase.sqlite" providerName="System.Data.SQLite"/> 

y quiero tener algo como:

<add name="EmailsSQLite" connectionString="data source=\data\EmailDatabase.sqlite" providerName="System.Data.SQLite"/> 

¿Es posible?

+2

prueba este: http://stackoverflow.com/questions/1833640/connection-string-with-relative-path -to-the-database-file # answer-6941582 –

+0

@jo_asakura Eso no es un duplicado ya que esa pregunta es acerca de una base de datos SQL Server CE, no una base de datos SQLite (estoy publicando este comentario como acaba de aparecer en la revisión cola para cerrar como duplicado). –

Respuesta

14

Puede especificar una ruta relativa como se describe en la respuesta de Lefty.

Sin embargo, esto será relativo al directorio de trabajo actual, que no será necesariamente el directorio que contiene su ejecutable.

Una forma de evitar esto es modificar la cadena de conexión antes de usarla, p.

En app.config:

connectionString="data source={AppDir}\data\EmailDatabase.sqlite 

En su código:

ConnectionStringSettings c = ConfigurationManager.ConnectionStrings[name];  
if (c == null) 
{ 
    ... handle missing connection string ... 
} 
string fixedConnectionString = c.ConnectionString.Replace("{AppDir}", AppDomain.CurrentDomain.BaseDirectory); 
... use fixedConnectionString 
+0

la única restricción es que no puede parametrizar fácilmente la cadena de conexión si usa un marco de carga automática como SubSonic (afaik - ¡espero que esté equivocado!) Ya que solo proporciona un nombre de configuración de conexión (que es de solo lectura) por ese punto); Es una pena que no puedas usar "~" como en web.config –

+0

¿Responde esta pregunta realmente a la pregunta? Tengo exactamente el mismo problema, pero aparece cuando uso el diseñador de EDMX. No puede mostrar mi fuente de datos (que es una base de datos SQLite), porque mi compañero de trabajo lo configuró y está usando su ruta. –

+0

En 'App.config' no puedo usar' ni '{AppDir}' ni '% AppDir%'. Esto simplemente crea una carpeta con exactamente el mismo nombre en 'AppData \ Local \ JetBrains \ Installations \ ReSharperPlatformVs14' – gek0n

4

Intente utilizar un "." antes de la primera barra invertida en la parte del origen de datos de la cadena.

por ejemplo.

data source=.\data\EmailDatabase.sqlite 
+0

Esto solo funcionará si usa la ruta relativa (que señala en el directorio de trabajo actual) _antes de que muestre cualquier archivo abrir/guardar cuadros de diálogo que cambian el cwd - asumiendo que se estableció en la ruta ejecutable para comenzar (que puede no ser el caso) –

+1

Si db no existe, obtendrá este error: 'Se produjo un error de activación de archivo. El nombre de archivo físico '. \ Database.mdf' puede ser incorrecto. Diagnostique y corrija errores adicionales, y vuelva a intentar la operación. CREATE DATABASE failed. Algunos de los nombres de archivos en la lista no se pudieron crear. Comprueba los errores relacionados, pero en un método de ruta completa creará el DB por ti. – Yar

3

Sí, es posible. Intenta usar | DataDirectory |.

En App.config

<add name="SqliteConnectionString" connectionString="Data Source=|DataDirectory|\Database.sqlite;" providerName="System.Data.SQLite"/> 

Más información de esta página https://msdn.microsoft.com/en-us/library/cc716756.aspx

+0

Esto es para un archivo SQLite dentro de su proyecto?Probablemente tengas que configurar Build Action para el archivo en el contenido para que se copie en debug/bin o release/bin para que funcione – DerpyNerd