Simple.Sqlite 0.7.2

There is a newer version of this package available.
See the version list below for details.
dotnet add package Simple.Sqlite --version 0.7.2                
NuGet\Install-Package Simple.Sqlite -Version 0.7.2                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Simple.Sqlite" Version="0.7.2" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Simple.Sqlite --version 0.7.2                
#r "nuget: Simple.Sqlite, 0.7.2"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Simple.Sqlite as a Cake Addin
#addin nuget:?package=Simple.Sqlite&version=0.7.2

// Install Simple.Sqlite as a Cake Tool
#tool nuget:?package=Simple.Sqlite&version=0.7.2                

SqliteWrapper

A very simple Sqlite wrapper to plug spiders with it

Compatibility

Huge compatibility, supports:

  • NET 5.0
  • NetCore 3.1
  • Net Framework 4.5
  • Net Standard 2.0

Table of Contents

Modules and Options

There are three modules in this package

  • SqliteDB → Sqlite wrapper
  • No-sql document storage
  • Configuration storage

How to get started:

Look at the examples int the project Test and the Samples folder

Or follow any of examples bellow

SqliteDB - Sqlite wrapper

Sqlite database to store data in tables

On new instance all database are backed up locally, see more here

How to use:

// Create a new instance
SqliteDB db = new SqliteDB("myStuff.db");

// Create a DB Schema
db.CreateTables()
  .Add<MyData>()
  .Commit();

var d = new MyData()
{
    //fill your object
};
// call INSERT
db.Insert(d);

// use GetAll to retrieve all data
var allData = db.GetAll<MyData>();
// Use queries to get back data
var allBobs = db.ExecuteQuery<MyData>("SELECT * FROM MyData WHERE MyName = @name ", new { name = "bob" });

What this module automates ?

Auto fill parameters

This library provides a Query operation similar to Dapper, it can return a query as an Enumerable of your class

var allData = db.GetAll<MyData>();

And supports objects (even anonymous) as parameters

var allBobs = db.ExecuteQuery<MyData>("SELECT * FROM MyData WHERE MyName = @name ", new { name = "bob" });

Also, it supports easy Insertion

var d = new MyData()
{
    //fill your object
};
// call INSERT
db.Insert(d);

And a VERY efficient, transaction based BulkInsertion

MyData[] lotsOfData = getLotsOfData();

// call INSERT
db.BulkInsert(lotsOfData);

Tip: For multi-million insertion, 5k blocks are a good start point

Migration

This library has a very simple Migration tah can:

  • Create new tables
  • Add columns to existing tables

To update your db schema just call CreateTables() and add your classes with Add<T> and then Commit()

// Create a new instance
SqliteDB db = new SqliteDB("myStuff.db");

// Create a DB Schema
 var migrationResult = db.CreateTables()
                         .Add<MyData>()
                         .Commit();

A TableCommitResult will be returned with all changes made

This command will not migrate DATA only the schema

You can make changes on the table definition before it commits with:

db.CreateTables()
  .Add<MyData>()
    .ConfigureTable(t => { /* change last added table here */ })
  .Add<NextTable>()
  .Commit();

You can use Attributes on your properties to create columns marked with:

  • PrimaryKey
  • Allow Null
  • Not Null
  • Default Value
  • Unique
// column tweak example
db.CreateTables()
  .Add<MyData>()
    .ConfigureTable(t => t["MyId"].IsUnique = true)
  .Commit();

Also,

  • Int properties with PK Attribute is also created as Auto-Increment
  • If neither Not-Null nor Allow-Null is applied, the library will assume by the attribute type

NoSqliteStorage - No-sql document storage

Need a fast to setup, no-installation no-sql database ? This module get you covered

Your data will be stored encoded (serialized) with BSON

How to use:

// create a new instance
NoSqliteStorage db = new NoSqliteStorage("myStuff.db");
// build your complex type
MyData d = new MyData()
{
    MyId = (int)DateTimeOffset.Now.ToUnixTimeSeconds(),
    MyName = "My name is bob",
    MyBirthDate = DateTime.Now,
    MyUID = Guid.NewGuid(),
    MyWebsite = new Uri("http://example.com"),
    MyDecimalValue = 123.4M,
    MyDoubleValue = 456.7,
    MyFloatValue = 789.3f,
    MyEnum = MyData.eIntEnum.Zero,
};
// Store it serialized with BSON
db.Store(d.MyUID, d);
// simple call Retrieve<T> to get your data deserialized back
var d2 = db.Retrieve<MyData>(id);

What this module automates ?

No-install, ready to use no-sql database

  • No tables
  • No migration
  • no-nothing 'relational'

ConfigurationDB - Configuration storage

Need to store some options or user settings ? This module will cover that

How to use:

// Create a new instance
ConfigurationDB db = new ConfigurationDB("myStuff.db");

// store your data with Key-Category pair
db.SetConfig<string>("Font", "User.UI.FrontPanel", "Arial");
db.SetConfig<Color>("BackColor", "User.UI.FrontPanel", Color.Red);

// retrieve your data with "default option"
var myFont = db.GetConfig<string>("Font", "User.UI.FrontPanel", "Times");
var myBkg  = db.GetConfig<Color>("BackColor", "User.UI.FrontPanel", Color.Green);

// remove config
db.RemoveConfig("Font", "User.UI.FrontPanel");

What this module automates ?

This automates various configuration save-set scenarios

Natively supported types:

  • All C# "primitive" types
  • string
  • decimal
  • DateTime
  • TimeSpan
  • Guid
  • byte[]
  • System.Drawing.Color

Primitive types is all types that type.IsPrimitive == true. Is all types you expect to be primitives: int, float, double, byte, etc...

Check all on this MSDN article

Backup

When a new SqliteDB instance is created a new backup of the database file is made.

As NoSqliteStorage and ConfigurationDB internally uses SqliteDB, they also create a backup

First, the database file is copied and compressed as *.bak.gz Later backups, the old *.bak.gz is renamed to *.old.gz and a new *.bak.gz is created

See an example with a database named data.db:

  • On first execution, there is no file
    • a new empty data.db will be created
    • a new also empty data.db.bak.gz is created
  • On later execution,
    • the backup data.db.bak.gz will be renamed to data.db.old.gz
    • a new data.db.bak.gz will be created from data.db

Every execution, you have the previous version available as a backup

  • To disable backups, you can use the static property as follows:
//this will disable the creation of backups of any posterior instances
SqliteDB.EnabledDatabaseBackup = false;
//this is specially useful when the database reaches a significant size

If you decided to use multiple instances with the same database file, you can avoid multiple backups by reutilizing types

Reutilizing types

If you already have a database and want to stick more stuff to it, you can simply:

  • Already have a SqliteDB instance ?
var noSql = NoSqliteStorage.FromDB(mySqliteDB);
var cfg = ConfigurationDB.FromDB(mySqliteDB);
  • Already have a NoSqliteStorage instance ?
var db = SqliteDB.FromDB(noSql);
var cfg = ConfigurationDB.FromDB(mySqliteDB);
  • Already have a ConfigurationDB instance ?
var db = SqliteDB.FromDB(cfg);
var noSql = NoSqliteStorage.FromDB(cfg);
Product Compatible and additional computed target framework versions.
.NET net5.0 is compatible.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 is compatible. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net40 is compatible.  net403 was computed.  net45 is compatible.  net451 was computed.  net452 was computed.  net46 is compatible.  net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 is compatible.  net48 is compatible.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on Simple.Sqlite:

Package Downloads
RafaelEstevam.Simple.Spider.SqliteStorage

Sqlite-based storage engine to the SimpleSpider See examples and documentation on the GitHub page

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
1.4.2 145 8/26/2024
1.4.1 185 6/30/2024
1.4.0 125 6/30/2024 1.4.0 is deprecated because it has critical bugs.
1.3.2 104 6/18/2024
1.3.1 167 5/6/2024
1.2.0 150 3/26/2024
1.1.0 132 1/22/2024
1.0.6 191 11/28/2023
1.0.5 419 8/26/2023
1.0.4 412 6/23/2023
1.0.3 176 5/21/2023
1.0.2 272 3/9/2023
1.0.1 316 1/27/2023
1.0.0.4-rc 145 12/20/2022
1.0.0.3-rc 144 11/23/2022
1.0.0.2-rc 191 11/23/2022 1.0.0.2-rc is deprecated because it has critical bugs.
1.0.0.1-rc 144 11/16/2022
0.9.1.3 390 11/23/2022
0.9.1.2 370 11/23/2022 0.9.1.2 is deprecated because it has critical bugs.
0.9.1.1 364 11/2/2022
0.9.1 431 8/6/2022
0.9.0.1 448 7/29/2022
0.8.5.4 566 2/14/2022
0.8.5.3 432 2/8/2022
0.8.5.2 454 1/23/2022
0.8.5.1 293 1/8/2022
0.8.5 310 1/1/2022
0.8.4.1 290 12/31/2021
0.8.4 1,053 11/20/2021
0.8.3 773 11/7/2021
0.8.2-alpha 291 10/8/2021
0.8.1-alpha 238 8/18/2021
0.8.0-alpha 398 8/11/2021 0.8.0-alpha is deprecated because it has critical bugs.
0.7.4.1 409 10/15/2021
0.7.4 405 10/8/2021
0.7.4-alpha 242 8/8/2021
0.7.3 430 8/3/2021
0.7.2 537 7/25/2021
0.6.4 539 5/3/2021
0.6.3 435 5/1/2021 0.6.3 is deprecated because it has critical bugs.
0.6.2 395 4/27/2021
0.6.1 516 3/27/2021
0.5.118 451 3/14/2021
0.5.100 575 1/24/2021
0.4.94 352 1/23/2021
0.4.93 406 1/23/2021 0.4.93 is deprecated because it has critical bugs.
0.4.90 435 1/21/2021
0.4.79 562 1/15/2021
0.4.68 483 1/6/2021
0.4.63 656 12/30/2020
0.4.43 689 12/21/2020
0.4.29 561 12/19/2020
0.4.24 715 12/19/2020
0.4.21 822 12/19/2020
0.1.1 484 11/5/2020
0.1.0 551 11/5/2020 0.1.0 is deprecated because it has critical bugs.