Question

Est-il possible de désigner une variable de liaison dans SQL Server en utilisant la même notation qu'Oracle, c'est-à-dire:0, :1 au lieu d'utiliser ?.

J'ai cherché mais je n'ai rien trouvé de concluant à ce sujet.Pour le moment, ma solution utilise des variables de liaison pour introduire des valeurs dans les instructions que j'exécute sur la base de données, ce qui fonctionne très bien dans Oracle, mais je dois également faire de même dans SQL Server et PostGIS, pour n'en nommer que quelques-unes.Je ne veux pas avoir à dire par exemple :

switch(dialect)
{
    case "Oracle":
    {
        oleDataBaseConnection.AddParameter(":1", coordsys);
        break;
    }

    case "SQLServer":
    { 
        oleDataBaseConnection.AddParameter("?", coordsys);
        break;
    }
}

*AddParameter() est une fonction de ma classe wrapper qui ajoute les valeurs à une liste à ajouter à l'objet de commande lors de l'appel de la fonction d'exécution que j'ai écrite.

Je voudrais que mon code soit aussi propre que possible et ne contienne pas d'éléments codés en dur comme indiqué ci-dessus.J'aimerais une solution qui convienne à tous.(oui, je sais, c'est probablement un vœu pieux !)

Je sais que je pourrais utiliser un remplacement de chaîne pour ce faire, mais ce n'est tout simplement pas ce que je recherche.Je ne veux pas vraiment utiliser une solution de contournement comme celle-là.Mon chef de projet m'a également demandé d'essayer de trouver une solution en utilisant des variables de liaison.

Des idées?

Était-ce utile?

La solution

La réponse courte est non, les variables de liaison sont implémentées différemment selon les bases de données.Vous aurez donc besoin de la logique de compatibilité compliquée quelque part.

Cela dit, j'ai personnellement résolu ce problème dans le passé en utilisant la substitution de chaîne pour insérer la bonne syntaxe pour un paramètre de liaison.Ainsi, vous pourriez intégrer :coordsys dans votre instruction SQL, puis oleDataBaseConnection.AddParameter("coordsys", coordsys); dans votre code.Votre instruction de préparation rechercherait alors le SQL, trouverait :coordsys et remplacez-le par ce dont vous avez besoin (par exemple ?), et créez également la liste des paramètres par nom pour votre exécution ultérieure.Lorsque vous procédez à l'exécution, vous pouvez à la volée créer la bonne liste de paramètres de liaison à utiliser.

L'implémentation du bit en coulisses est un peu délicate, mais j'ai personnellement constaté que cela conduit à un SQL propre, avec les avantages des paramètres de liaison (comme les performances de la base de données, la sécurité contre les attaques par injection SQL).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top