Wczytanie rozszerzeń SQLite

0

Cześć,
Próbuję załadować rozszerzenie do SQLite series, w celu korzystania z generate_series().

using System;
using System.Windows;
using System.Data.SQLite;

private SQLiteConnection dbConn = new SQLiteConnection("Data Source=DB\\DbName.db;Version=3;New=True;Compress=True;");
dbConn.Open();
dbConn.EnableExtensions(true);
dbConn.LoadExtension("'series'"); //Błąd: nie można znaleźć modułu
//dbConn.LoadExtension("G:\SQLiteStudio\ext\series.dll"); //To samo -> Błąd: nie można znaleźć modułu

Ładowanie modułu przez Query daje błąd 'Not Authorised'.

using (SQLiteCommand command = new SQLiteCommand(@"SELECT load_extension('series');", dbConn))
{
    command.ExecuteNonQuery();
}

Powyższa komenda działa w SQLite Studio.

Czego mi brakuje lub robię nie tak?

VS2022, .Net Framework 4.7.2

0

A jak podmienisz tego selecta na jakiegoś prostego typu selekty 1?

0

Z obsługą bazy z poziomu tworzonej aplikacji nie ma problemu (SELECT 1 działa). Problem jest tylko z włączeniem rozszerzenia, żeby korzystać z funkcji generate_series().

0

@leonarth:

SqlLite i C# / Java to zawsze było ślisko...
Dla języków natywnych PRZYNAJMNIEJ implementacja engine była jasna: natywna.
Tu ... cholera wie

0

A rozszerzenie napisane w C/C++ działają ?
Z dokumentacji https://sqlite.org/c3ref/load_extension.html

Extension loading must be enabled using sqlite3_enable_load_extension() or sqlite3_db_config(db,SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION,1,NULL) prior t

Ten DLL w .NET na poprawny "calling convention" ?

0
Marius.Maximus napisał(a):

A rozszerzenie napisane w C/C++ działają ?
Z dokumentacji https://sqlite.org/c3ref/load_extension.html

Extension loading must be enabled using sqlite3_enable_load_extension() or sqlite3_db_config(db,SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION,1,NULL) prior t

Ten DLL w .NET na poprawny "calling convention" ?

Niestety nie wiem jak zastosować sqlite3_enable_load_extension() z poziomu C# aby zmienić ENABLE_LOAD_EXTENSION na 1
Ustawiłem jak niżej, bez zmian.

dbConn.SetConfigurationOption(SQLiteConfigDbOpsEnum.SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION, true);
1

Udało się. Skompilowałem rozszerzenie series.c do series.dll i poniższe polecenie zadziałało

dbConn.LoadExtension("series.dll")

series.c pobrane z:
https://www.sqlite.org/src/file/ext/misc/series.c

1 użytkowników online, w tym zalogowanych: 0, gości: 1