Contexte:Créer pilote personnalisé pour System.Data.Common
Notre application C# génère et exécute des requêtes à plusieurs types de bases de données (Oracle, SQL Server, MySQL), mais une exigence est venu de les appliquer aussi à un format de fichier propriétaire.
- L'espace de noms utilisé jusqu'à présent est System.Data.Common.
- Les requêtes dont nous avons besoin d'appliquer ne sont pas négligeables (SELECTs imbriquées, alias dans FROM, substring méthodes et concaténations de chaînes)
Nous avons converti d'abord le contenu du fichier propriétaire au format CSV, pour lesquelles il existe la Pilote {Microsoft Text Driver (* .txt; * .csv)}. Cependant, le client exigeait qu'aucun fichier temporaire ne soit généré et tout devait se passer en mémoire.
La création d'un pilote ODBC pour interroger directement le fichier semble trop longue. Nous envisageons donc de créer un pilote (éventuellement ODBC), dans lequel nous allons "incorporer" le pilote SQLITE ODBC. À l'intérieur de ce pilote, nous pouvons charger le contenu des fichiers CSV dans la base de données "en mémoire", puis transmettre la requête au pilote ODBC interne.
Mes questions:
- Est-ce que cette solution semble possible?
- Où devrions-nous commencer afin de créer un pilote ODBC à partir de zéro?
Merci
L'idée est la suivante: À partir d'une application de bureau, nous stockons dans la base de données une requête SQL, ainsi que la chaîne de connexion ADO. Ensuite, WS déployé à distance trouve ces deux dans la base de données et a exécuté la requête. Actuellement (à l'exception des fichiers propriétaires), quel est le fournisseur du logiciel WS? Nous aimerions que la même chose soit le cas avec les fichiers. Nous avons donc pensé à créer un pilote ODBC, dont la chaîne de connexion contient l'emplacement des fichiers, et qui "incorporerait" la génération et la population d'une base de données SQLite, et transmettrait les requêtes reçues et les opérations à l'ODBC SDLite interne. –
Je suis sceptique: le WS ne peut pas totalement ignorer le fournisseur ADO .NET qui va être utilisé, car une connexion de base de données en clair doit être créée à un moment donné (System.Data.Common.DbConnection est abstrait). Voir ma réponse pour plus, de nouveaux développements. – Mac