I send a short code that always ends with an exception.
Tested on custom board with SCM20260N and Dev board (SCM20260D Dev Rev C)
Tested SD cards:
SanDisk 32GB V30
Kingston 32GB V10
GOODRAM 4GB Class10
using GHIElectronics.TinyCLR.Data.SQLite;
using GHIElectronics.TinyCLR.Devices.Storage;
using GHIElectronics.TinyCLR.IO;
using GHIElectronics.TinyCLR.Pins;
using System;
using System.Collections;
using System.Diagnostics;
using System.IO;
using System.Text;
using System.Threading;
namespace TinyCLRSDCard
{
class Program
{
static void Main()
{
Debug.EnableGCMessages(true);
StorageController sd = StorageController.FromName(SC20260.StorageController.SdCard);
IDriveProvider drive = FileSystem.Mount(sd.Hdc);
string directory = drive.Name + "\\DB";
DirectoryInfo directoryInfo = new DirectoryInfo(directory);
if (directoryInfo.Exists)
{
directoryInfo.Delete(true);
}
directoryInfo.Create();
for(int i = 0; i < 10; i++)
{
new Database(directory, i);
}
while (true) ;
}
}
class Database
{
private static int numRows = 0;
private SQLiteDatabase database;
private Random rand;
public Database(string directory, int instanceIndex)
{
database = new SQLiteDatabase($"{directory}\\database{instanceIndex}.SQLite");
database.ExecuteNonQuery("CREATE TABLE Foo (Id INTEGER PRIMARY KEY AUTOINCREMENT, BarA EntryIndex, BarB INTEGER, BarC INTEGER, BarD INTEGER, BarE INTEGER, BarF INTEGER, BarG INTEGER, BarH INTEGER, BarI INTEGER, BarJ INTEGER);");
rand = new Random();
new Thread(() =>
{
while (true)
{
for (int i = 0; i < 10; i++)
{
database.ExecuteNonQuery($"INSERT INTO Foo (BarA, BarB, BarC, BarD, BarE, BarF, BarG, BarH, BarI, BarJ) VALUES ({rand.Next()}, {rand.Next()}, {rand.Next()}, {rand.Next()}, {rand.Next()}, {rand.Next()}, {rand.Next()}, {rand.Next()}, {rand.Next()}, {rand.Next()})");
Debug.WriteLine($"Instance: {instanceIndex}, Num rows: {++numRows}");
}
Thread.Sleep(rand.Next(500));
}
}).Start();
}
}
}
...
Instance: 4, Num rows: 37
Instance: 5, Num rows: 38
Instance: 6, Num rows: 39
Instance: 6, Num rows: 40
Instance: 6, Num rows: 41
Instance: 0, Num rows: 42
Instance: 1, Num rows: 43
Instance: 2, Num rows: 44
Instance: 3, Num rows: 45
Instance: 4, Num rows: 46
Instance: 5, Num rows: 47
Instance: 6, Num rows: 48
#### Exception GHIElectronics.TinyCLR.Data.SQLite.QueryExecutionException - 0x00000000 (1) ####
#### Message: unable to open database file
#### GHIElectronics.TinyCLR.Data.SQLite.SQLiteDatabase::ExecuteNonQuery [IP: 002d] ####
#### TinyCLRSDCard.Program::Main [IP: 0048] ####
Instance: 0, Num rows: 49
Instance: 1, Num rows: 50
Instance: 2, Num rows: 51
#### Exception GHIElectronics.TinyCLR.Data.SQLite.QueryExecutionException - 0x00000000 (5) ####
#### Message: unable to open database file
#### GHIElectronics.TinyCLR.Data.SQLite.SQLiteDatabase::ExecuteNonQuery [IP: 002d] ####
Instance: 3, Num rows: 52
#### Exception GHIElectronics.TinyCLR.Data.SQLite.QueryExecutionException - 0x00000000 (6) ####
#### Message: unable to open database file
#### GHIElectronics.TinyCLR.Data.SQLite.SQLiteDatabase::ExecuteNonQuery [IP: 002d] ####
Instance: 4, Num rows: 53
#### Exception GHIElectronics.TinyCLR.Data.SQLite.QueryExecutionException - 0x00000000 (7) ####
#### Message: unable to open database file
#### GHIElectronics.TinyCLR.Data.SQLite.SQLiteDatabase::ExecuteNonQuery [IP: 002d] ####
Instance: 5, Num rows: 54
#### Exception GHIElectronics.TinyCLR.Data.SQLite.QueryExecutionException - 0x00000000 (8) ####
#### Message: unable to open database file
#### GHIElectronics.TinyCLR.Data.SQLite.SQLiteDatabase::ExecuteNonQuery [IP: 002d] ####
Instance: 6, Num rows: 55
#### Exception GHIElectronics.TinyCLR.Data.SQLite.QueryExecutionException - 0x00000000 (9) ####
#### Message: unable to open database file
#### GHIElectronics.TinyCLR.Data.SQLite.SQLiteDatabase::ExecuteNonQuery [IP: 002d] ####
Exception thrown: 'GHIElectronics.TinyCLR.Data.SQLite.QueryExecutionException' in GHIElectronics.TinyCLR.Data.SQLite.dll
Exception thrown: 'GHIElectronics.TinyCLR.Data.SQLite.QueryExecutionException' in GHIElectronics.TinyCLR.Data.SQLite.dll
Exception thrown: 'GHIElectronics.TinyCLR.Data.SQLite.QueryExecutionException' in GHIElectronics.TinyCLR.Data.SQLite.dll
Exception thrown: 'GHIElectronics.TinyCLR.Data.SQLite.QueryExecutionException' in GHIElectronics.TinyCLR.Data.SQLite.dll
Exception thrown: 'GHIElectronics.TinyCLR.Data.SQLite.QueryExecutionException' in GHIElectronics.TinyCLR.Data.SQLite.dll
Exception thrown: 'GHIElectronics.TinyCLR.Data.SQLite.QueryExecutionException' in GHIElectronics.TinyCLR.Data.SQLite.dll
An unhandled exception of type 'GHIElectronics.TinyCLR.Data.SQLite.QueryExecutionException' occurred in GHIElectronics.TinyCLR.Data.SQLite.dll
Additional information: unable to open database file