Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Cross-platform Sqlite

Tags:

c#

sqlite

I am writing an application that need to run in iOS, Android, Windows Phone, WPF, Windows 8 Metro, Linux and Mac. I have about 95 % of the code in the cross-platform realm but the UI and some things obviously needs to be coded specifically for each platform.

Now, we need to add some very simple database support in the app and I would love to work against Sqlite from the cross-platform realm in my code. Can this be done with any existing Sqlite wrapper or do I need to create my own? Or should I use several Sqlite wrappers that have the same syntax and just reference different libraries from my different csproj files (per platform)?

I have read this Q/A Is there a .NET/C# wrapper for SQLite? but after an hour of reading I am still unsure how to get things working on all those platforms so I thought that somebody might have thought about these things before me.

like image 933
Ricky Helgesson Avatar asked Oct 22 '12 17:10

Ricky Helgesson


2 Answers

Some options for cross-platform .NET/C# development with SQLite are:

SQLitePCL.raw

A Portable Class Library (PCL) for low-level (raw) access to SQLite

SQLitePCL.raw provides a very thin C# wrapper ontop of the SQLite C API. The API exposed by SQLitePCL.raw is hostile from an application developer perspective, but is designed for use as a common portable layer upon which friendlier wrappers can be built.

License: Apache License v2

Source code: https://github.com/ericsink/SQLitePCL.raw

Nuget: https://www.nuget.org/packages/SQLitePCLRaw.core

Platforms: Xamarin.Android, Xamarin.iOS, UWP, Windows Phone 8.1, .NET 4.5, .NET 4.0, .NET 3.5, Linux, MacOS, NetStandard 1.1, Windows Phone 8 (with limitations), Windows Phone 8.1 Silverlight (with limitations)


SQLitePCL.pretty

A pretty face on top of SQLitePCL.raw

This library wraps the C like SQLiteAPI provided by SQLitePCL.raw with a friendly C# object oriented API. SQLitePCL.pretty has extensive unit test coverage and supports many newer features available in more recent SQLite versions.

License: Apache License v2

Source code: https://github.com/bordoley/SQLitePCL.pretty

Nuget: https://www.nuget.org/packages/SQLitePCL.pretty

Platforms: same as SQLitePCL.raw


SQLite-net

Simple, powerful, cross-platform SQLite client and ORM for .NET

SQLite-net was designed as a quick and convenient database layer. Very easy to integrate with existing projects and runs on all the .NET platforms, with very simple methods for executing CRUD operations and queries safely (using parameters) and for retrieving the results of those query in a strongly typed fashion.

License: MIT License

Source code: https://github.com/praeclarum/sqlite-net

Nuget: https://www.nuget.org/packages/sqlite-net-pcl

Platforms: same as SQLitePCL.raw


Microsoft.Data.Sqlite

SQLite implementations of the System.Data.Common interfaces

This project is part of ASP.NET Core and maintained by Microsoft

License: Apache License v2

Source code: https://github.com/aspnet/Microsoft.Data.Sqlite

Nuget: https://www.nuget.org/packages/Microsoft.Data.SQLite

Platforms: .NET Framework, Mono, .NET Core (.NET Native, CoreCLR, Windows Universal), Xamarin (planned)

like image 167
Marcos Avatar answered Oct 23 '22 02:10

Marcos


I'd recommend using the Mono version (http://www.mono-project.com/SQLite) of the SQLite wrapper. The wrapper itself is written entirely in managed code and you just need to provide the Sqlite library for the respective environment.

I had a C# project that ran on both linux and windows by doing that.

You MIGHT be able to get away with using the official C# wrapper (http://system.data.sqlite.org/) but I am unsure on how it deals with multiple platforms.

like image 1
Josh Mackey Avatar answered Oct 23 '22 02:10

Josh Mackey