Comment puis-je intégrer une Base de données SQLite dans un .NET DLL et l'utiliser à partir de C#?
Je suis actuellement en train de travailler sur certains travaux d'évaluation pour un projet que je suis la planification d'.
Récemment, j'ai regardé les solutions pour un mécanisme de stockage des données pour ma demande et lors de mes recherches tombé sur SQLite. Actuellement, je utiliser SQLite avec le Système.Les données.SQLite wrapper.
J'aime vraiment la façon dont il fonctionne, mais j'ai un problème que je n'arrivais pas fixe et j'ai aussi trouvé aucune aide concernant mon problème sur internet.
Je voudrais que ma Base de données SQLite pour être incorporé dans une de mes applications Dll (ie. Title.Storage.dll) à l'intérieur de cette DLL. Est-ce possible?
Comment puis-je accéder à la base de données?
Ce serait génial si je pouvais utiliser quelque chose comme:
SQLiteConnection con = new SQLiteConnection();
con.ConnectionString="DataSource=Title.Storage.storage.db3";
con.Open();
Merci d'avance et meilleures salutations,
3Fox
Même si cela était possible, j'imagine qu'il devait envoyer certaines suites de sécurité des fous - grand, constante des modifications à un fichier de code.
Si vous aviez une petite quantité de en lecture seule données que vous avez souhaité interroger, ce serait probablement très bien fonctionner - lire la ressource dans une base de données en mémoire et de les interroger.
J'ai peut-être une erreur, mais je remmember lorsque vous traitez avec Dotnet 2 il y avait un moyen d'incorporer un sql express DB dans le fichier exe/dll
Nous ne voulons pas écrire ici pour la base de données - nous voulons l'utiliser comme un point de départ pour une
:memory:
base de données hébergée, ce qui n'est pas nécessairement retenu n'importe où. Les "solutions" que l'extrait de la ressource incorporée à un fichier ne sont pas l'idéal - vraiment limite l'utilité des bases de données en mémoire.OriginalL'auteur chrischu | 2009-04-26
Vous devez vous connecter pour publier un commentaire.
Une assemblée n'est pas pour le stockage des fichiers, c'est pour le code de stockage. Alors que vous pouvez stocker des fichiers dans un assemblage, ils sont en lecture seule.
Qu'en lecture seule base de données?
OriginalL'auteur Samuel
Ce n'est pas possible en tant que tel. Ce que vous pourriez faire est d'intégrer la db dans votre projet de dll et vidage à une certaine position sur le système de fichiers (peut-être AppData?) et lire et à écrire à partir de là. Ayant db s'asseoir directement à l'intérieur de l'exécutable (ou dll) ne peut pas être une bonne idée dans le sens où elle gonfle la taille de l'application en plus d'être techniquement infaisable.
Avoir un seul exécutable à distribuer est une question de goût que j'aime. Dans votre cas, mais les problèmes sont plus. Ce n'est pas seulement à propos de l'intégration de la db fichier seul, ce sujet de la dll associées avec elle? Étapes 2:
1) Ajoutez les dll (
System.Data.SQLite
?) associé à votre base de données à votre projet commeEmbedded Resource
(pas nécessairement unResource file
) et laissez le système se résoudre automatiquement l'assemblée des conflits. L'attraper ici comment le faire.2) Maintenant ajouter votre fichier de base de données pour votre
Resources
de votre projet (et l'extraire)ou encore mieux ne permet pas d'intégrer la db en tant que tel dans votre projet, mais écrire de la logique pour créer une base de données dans votre application. Si demain vous avez besoin de changer la version de SQLite, disons de 3 à 4? Avec la première approche, vous avez besoin de créer une base de données pour vous-même et de ré-intégrer dans le projet. Mais si vous écrivez de la logique pour créer la db dans votre demande de mise à jour de SQLite version est juste une question de changer la ADO.NET dll (le code reste le même). Peut-être comme ceci:
Et dans la chaîne de connexion ajouter
FailIfMissing=False;
OriginalL'auteur nawfal
Si vous êtes sur NTFS, vous pouvez utiliser un flux de données. Sur mon projet de nous cacher la base de données SQLite à l'intérieur d'un autre fichier en utilisant un autre ruisseau appelé :DB.
Vous perdrez flux alternatif après avoir copié le fichier de partition FAT.
OriginalL'auteur Anthony Brien
Je ne pense pas que le stockage de données DLL est une bonne idée, mais il y a une sale façon de le faire.
Pour charger des données à partir de la DLL:
Maintenant, vous pouvez faire toutes les requêtes en mémoire.
Enregistrer les données DLL:
C'est stupide, mais il devrait fonctionner. Espérons que vous n'aurez plus jamais de code de cette façon.
OriginalL'auteur mateusza
SQLite est emballé et distribué comme un seul fichier C avec un peu de (3 je crois) fichiers d'en-tête. Cela signifie que vous pouvez compiler l'ensemble de 50000 programme en ligne avec une compilation de commande et d'obtenir un .o fichier. À partir de là, vous pouvez le lier à votre application de la DLL avec les autres fichiers que vous avez le lien dans le DLL.
Une fois que vous générez sqlite3.o dans votre application de DLL, les symboles dans son SQLite API deviennent disponibles à vos programmes de la même manière que les autres C/C++ Dll deviennent disponibles dans votre C#/VB programmes.
Découvrez http://www.sqlite.org/amalgamation.html pour plus d'info.
OriginalL'auteur