visual - Excepción al usar SQLite en la aplicación WinRT
sqlite windows form (1)
Estoy construyendo una aplicación de Windows 8, y ahora quiero usar SQLite para esta aplicación. Instalé SQLite for Windows Runtime
través del administrador de extensiones de Visual Studio 2013, y agregué sqlite-net
a mi proyecto a través de NuGet.
Estoy intentando crear una base de datos en mi app.xaml.cs OnLaunched
, pero obtengo esta excepción cuando ejecuto el proyecto:
Imposible cargar DLL ''sqlite3'': no se pudo encontrar el módulo especificado. (Excepción de HRESULT: 0x8007007E)
Esto es muy extraño porque no hay ningún error durante la compilación. De todos modos, creo que intenta decirme que necesito hacer referencia a una DLL adicional: sqlite3.dll
, pero eso no funciona. Tengo 6 DLL diferentes en mi sistema de archivos: ambas versiones de depuración y versión de ARM, x64 y x86. Intenté agregar la versión de lanzamiento x86 a mi proyecto, pero eso da como resultado esta excepción:
No se pudo agregar una referencia a ''C: / Users / Leon / Documents / Visual Studio 2013 / Projects / Googalytics / packages / SQLite / x86 / sqlite3.dll''. Asegúrese de que el archivo esté accesible y de que sea un ensamblaje o componente COM válido.
Es muy triste que la documentación para sqlite-net sea una mierda, está muy desactualizada (los ejemplos ya no funcionan), es muy incompleta y tampoco se menciona la adición manual de una DLL. Entonces tengo 2 preguntas:
- ¿Cómo soluciono este problema en particular?
- ¿Dónde encuentro documentación actualizada para sqlite-net?
Editar: el código que uso para crear la base de datos es:
private void InitializeDatabase()
{
var db = new SQLiteConnection("Googalytics");
db.CreateTable<Account>();
db.CreateTable<WebProperty>();
db.CreateTable<Profile>();
}
Llamo a ese método desde aquí:
InitializeDatabase();
if (rootFrame.Content == null)
{
// When the navigation stack isn''t restored navigate to the first page,
// configuring the new page by passing required information as a navigation
// parameter
if (!rootFrame.Navigate(typeof(MainPage), args.Arguments))
{
throw new Exception("Failed to create initial page");
}
}
// Ensure the current window is active
Window.Current.Activate();
edit2: más información sobre mi configuración:
- Visual Studio 2013 RC
- Windows 8.1 RTM
- SQLite para Windows Runtime 3.8.0.2
- sqlite-net 1.0.7
Su proyecto tiene su modo de compilación configurado actualmente en Cualquier CPU, ¿cuál es el valor predeterminado? Como el ensamblaje SqLite no se compila como AnyCPU, debe establecer su modo de compilación en X86 y agregar la referencia X86 SqLite.
Al implementar su aplicación, también debe crear 3 paquetes en lugar de 1 paquete AnyCPU.
Como su proyecto es AnyCPU, recibe el mensaje de error cuando intenta agregar el x86, x86 no es válido para AnyCPU.
ACTUALIZAR
Traté de replicar tu problema. Instalé el SQLite for Windows Runtime
para Visual Studio Ultimate 2012, luego de eso creé un Windows Store Project, luego agregué la referencia SqLite luego de agregar sqlite-net
y la última vez que agregué tu código para la creación de DB.
Modifiqué un poco el código (ruta y tablas). Pero mi código no da ningún error en absoluto.
No necesité hacer referencia a los ensamblajes SqLite. Porque al instalar la extensión en Visual Studio obtiene la referencia en su lista de extensiones (aún necesita seleccionarla, simplemente no agrega las dlls):
Pero igual que dije en mi primera respuesta, necesitas establecer tu modo de compilación a algo más que ''Cualquier CPU''
Mi ejemplo está en mi skydrive (cuando pruebo la configuración del conjunto a x86).
ACTUALIZACIÓN 2
Ruta Db:
var dbPath = Path.Combine(Windows.Storage.ApplicationData.Current.LocalFolder.Path, "db.sqlite");
var db = new SQLite.SQLiteConnection(dbPath);