Wczytanie rozszerzeń SQLite

Wczytanie rozszerzeń SQLite
LE
  • Rejestracja:około 4 lata
  • Ostatnio:ponad rok
  • 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

edytowany 2x, ostatnio: Riddle
LE
Nie jest to wymagane. Połączenie i praca z bazą jest ok. Problem z włączeniem rozszerzenia z poziomu c#.
S4
  • Rejestracja:około 3 lata
  • Ostatnio:ponad rok
  • Postów:1268
0

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

LE
  • Rejestracja:około 4 lata
  • Ostatnio:ponad rok
  • 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().

edytowany 1x, ostatnio: Riddle
AK
  • Rejestracja:prawie 7 lat
  • Ostatnio:około miesiąc
  • 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


Bo C to najlepszy język, każdy uczeń ci to powie
edytowany 1x, ostatnio: AnyKtokolwiek
Marius.Maximus
  • Rejestracja:ponad 14 lat
  • Ostatnio:około 3 godziny
  • Postów:2100
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" ?


--
Nie przyjmuję reklamacji za moje rady, używasz na własną odpowiedzialność.
Programowanie bez formatowania to jak chodzenie ze spodniami spuszczonymi na kostki. Owszem da się ale po pierwsze nie wygodne, po drugie nieprzyzwoicie wygląda.
Przed zaczęciem nowego wątku przeczytam problem XY
LE
  • Rejestracja:około 4 lata
  • Ostatnio:ponad rok
  • 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);
edytowany 2x, ostatnio: leonarth
Marius.Maximus
  • Rejestracja:ponad 14 lat
  • Ostatnio:około 3 godziny
  • Postów:2100
0

--
Nie przyjmuję reklamacji za moje rady, używasz na własną odpowiedzialność.
Programowanie bez formatowania to jak chodzenie ze spodniami spuszczonymi na kostki. Owszem da się ale po pierwsze nie wygodne, po drugie nieprzyzwoicie wygląda.
Przed zaczęciem nowego wątku przeczytam problem XY
LE
  • Rejestracja:około 4 lata
  • Ostatnio:ponad rok
  • 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.