Wczytanie rozszerzeń SQLite

Wczytanie rozszerzeń SQLite
LE
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8
0

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

Kopiuj
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'.

Kopiuj
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

S4
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1268
0

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

LE
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8
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().

AK
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3561
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

Marius.Maximus
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2201
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" ?

LE
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8
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.

Kopiuj
dbConn.SetConfigurationOption(SQLiteConfigDbOpsEnum.SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION, true);
Marius.Maximus
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2201
LE
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8
1

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

Kopiuj
dbConn.LoadExtension("series.dll")

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.