TinyCLR 2.0 - Sqlite

just tested TinyCLR OS with Sqlite (loading file from SD Card) and felt in love how it handle
fast , easy and perfectly .

so i decide to explain what i did it …

https://download.sqlitebrowser.org/DB.Browser.for.SQLite-3.11.2-win64.zip

create database : tinyclros.db

create config table

CREATE TABLE "config" (
	"id"	INTEGER NOT NULL,
	"key"	TEXT NOT NULL,
	"value"	TEXT NOT NULL,
	PRIMARY KEY("id")
)

do insert into table config

Insert Into config Values (1,'ssid','valoninet');
Insert Into config Values (2,'password','valoni12345678');
Insert Into config Values (3,'mqttclientid','client1');
Insert Into config Values (4,'mqttuser','user1');
Insert Into config Values (5,'mqttpass','pass1');

close DB.Browser.for.SQLite-3.11.2 and copy tinyclros.db into SD Card

put SD CARD into dev board i used little ones (with ST7735 display) - now start coding to retreive info from tinyclros.db

this sample is how to create an external config info that you could delivery to client
or use for any dynamic configuration without need to do intervention on app


using GHIElectronics.TinyCLR.Devices.Storage;
using GHIElectronics.TinyCLR.IO;
using System;
using System.IO;
using System.Text;
using System.Collections;
using System.Diagnostics;
using GHIElectronics.TinyCLR.Data.SQLite;
using System.Threading;

namespace TinyClrOsDB
{
    public class Program
    {
        static string[] configid;
        static string[] configkeys;
        static string[] configval;

        private static void Main()
        {
            Debug.WriteLine("-----------------------");
            Debug.WriteLine("Open SD Card");
            Debug.WriteLine("-----------------------");

            /* open sd card */
            var sd = StorageController.FromName(@"GHIElectronics.TinyCLR.NativeApis.STM32H7.SdCardStorageController\0");
            var drive = FileSystem.Mount(sd.Hdc);
            Debug.WriteLine("Load file");
            Debug.WriteLine("-----------------------");

            /* load db from sd card */
            var file = $@"{drive.Name}tinyclros.db";
            Debug.WriteLine(file);

            using (var db = new SQLiteDatabase(file.ToString()))
            {

                // Debug.WriteLine("Do insert for additional things we need.....");
                // db.ExecuteNonQuery("INSERT INTO config (id, key, value) VALUES (null, 'key1', 'res1');");
                // db.ExecuteNonQuery("INSERT INTO config (id, key, value) VALUES (null, 'key2', 'res2');");
                // db.ExecuteNonQuery("INSERT INTO config (id, key, value) VALUES (null, 'key3', 'res3');");

                // Thread.Sleep(500);

                // Debug.WriteLine("Do update...");
                // db.ExecuteNonQuery("UPDATE config SET value='aaaaa' WHERE key='ssid';");
                // db.ExecuteNonQuery("UPDATE config SET value='valoni2222' WHERE key='password';");

                // Debug.WriteLine("Do select...");
                var result = db.ExecuteQuery("SELECT id,key,value  FROM config;");

                configid = new string[result.RowCount];
                configkeys = new string[result.RowCount];
                configval = new string[result.RowCount];

                int ii = 0;
               
                foreach (ArrayList i in result.Data)
                {
                    int kk = 0;

                    foreach (object j in i)
                    {

                        if (kk == 0) configid[ii] = j.ToString();
                        if (kk == 1) configkeys[ii] = j.ToString();
                        if (kk == 2) configval[ii] = j.ToString();

                        kk++;
                    }

                    ii++;
               
                }

                Thread.Sleep(500);

               // Debug.WriteLine("Do delete...");
               // db.ExecuteNonQuery("DELETE FROM config WHERE key='key1' and value='res1';");
               // db.ExecuteNonQuery("DELETE FROM config WHERE key='key2' and value='res2';");
               // db.ExecuteNonQuery("DELETE FROM config WHERE key='key3' and value='res3';");

            }

            FileSystem.Flush(sd.Hdc);

            Debug.WriteLine("retrived info from db");
            Debug.WriteLine("-----------------------");
            /* retreive info after reading from db */
            for (int j=0;j<=configkeys.Length-1;j++)
            {
                Debug.WriteLine("");
                Debug.WriteLine(" id  : " + configid[j].ToString());
                Debug.WriteLine(" keys  : " + configkeys[j].ToString());
                Debug.WriteLine(" values : " + configval[j].ToString());
            }


            while(true)
            {
                /*
                  TO DO YOUR WORK after .... 
                */
            }

        }
    }
}

results is retreived info from DB perfectly and very fast .

image

6 Likes

We are removing sqlite next week.

Just kidding, happy Valentine’s!

4 Likes

Can we use TinyCLR2.0 itself to create the database on the fly? Having to manually do this each time would not be efficient if rolling out many devices.

Yes http://new-docs.ghielectronics.com/software/tinyclr/tutorials/sqlite-database.html

3 Likes