1

I am stuck in connecting sqlite with xamarin forms/pcl/uwp application. Following is my code to set path for database

Android (Following works perfectly alright)

App1.globals.path = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
//App1.globals.path=> /data/user/0/com.companyname.App1/files
LoadApplication(new App1.App());

UWP (Following does not work)

App1.globals.path = Windows.Storage.ApplicationData.Current.LocalFolder.Path;
//App1.globals.path => C:\Users\sami.akram\AppData\Local\Packages\8e3de984-9360-4549-a5cc-80071995402b_hy7qfqqm9rwga\LocalState
LoadApplication(new App1.App());

Following is the code in App1 (Portable) => Main App

[assembly: XamlCompilation(XamlCompilationOptions.Compile)]
namespace App1
{

    public class globals
    {
        public static string path = "test.db3";
    }

    public partial class App : Application
    {
        public App()
        {
            InitializeComponent();
            var dbPath = System.IO.Path.Combine(globals.path, "test.db3");
            var db = new SQLiteConnection(dbPath);
            SetMainPage();
        }
    }
}

Error I face is

Could not load file or assembly 'SQLite-net, Version=1.4.118.0, Culture=neutral, PublicKeyToken=null'. The located assembly's manifest definition does not match the assembly reference

enter image description here

But assembly version should not be any issue as I have installed same sqllite for all projects following image shows it. Note I tried the app with .net 4.5 and .net 4.6 but it results same.

enter image description here

I tried clean solution rebuild solution. Nothing is helping yet, same error could not load assembly..

1
  • This is a duplicate question. See here for details Commented Aug 14, 2017 at 14:27

5 Answers 5

3

You might also need to ensure you have the VS extension provided by Sqlite.org installed.

Basically, you need to enable SQLite on UWP Apps. The SQLite core engine is already included on iOS and Android, but not on Windows. Therefore, you wil need to install the SQLite extension for Visual Studio, which provides precompiled binaries for the database engine and automates the task of including the required files with new projects.

A detailed article with steps on how to integrate Sqlite package in Xamarin.Forms project for UWP can be found here

Sign up to request clarification or add additional context in comments.

2 Comments

thank you sir. forgot to add this to my project again when i purchased vs enterprise.
That extension says it is not compatible with my version of VS (16.4.4). It further says it might cause VS to become unstable.
3

There's an issue with the "sqlite-net-pcl" NuGet package version 1.4.118.0 that only affects UWP projects referencing a Xamarin.Forms PCL project.
The bug has been fixed with the "sqlite-net-pcl" version 1.5.166-beta.

A couple of issues have been added to the official SQLite-net GitHub page:

1 Comment

You also have to update the package in the PCL (not only UWP). Otherwise you get System.MissingMethodException for CreateTableAsync().
0

you have to use platform-specific Windows.Storage API to determine the database file path. You can use following link for help

https://developer.xamarin.com/guides/xamarin-forms/application-fundamentals/databases/#Windows_10_Universal_Windows_Platform_UWP

Here is the sample code:

https://developer.xamarin.com/samples/xamarin-forms/Todo/

1 Comment

Sorry dear i edited my question. When used ApplicationData.Current.LocalFolder.Path it still gives same exception
0

I have tested your code and reproduced your issue. The problem is that you have no permission to access windows local folder in portable library with Version=4.0.10.0 System.IO.

portable library System.IO version

portable library System.IO version UWP client project System.IO version

UWP client project System.IO version

The way to use sqlite within xamarin form depends on dependency service. you could refer to the following.

public interface IFileHelper
{
  string GetLocalFilePath(string filename);
}

Interface implementation

using Windows.Storage;
...

[assembly: Dependency(typeof(FileHelper))]
namespace Todo.UWP
{
    public class FileHelper : IFileHelper
    {
        public string GetLocalFilePath(string filename)
        {
            return Path.Combine(ApplicationData.Current.LocalFolder.Path, filename);
        }
    }
}

usage

var path = DependencyService.Get<IFileHelper>().GetLocalFilePath("TodoSQLite.db3")
var db = new SQLiteConnection(path);

For more please refer to Local Databases.

Comments

0

It seems that this is a particular issue of sqlite-net. Even with the implementation of xamarin's page (See xamarin's implementation) it shows that error.

What worked for me was to update the sqlite-net-pcl to 1.5.166-beta.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.