Pouvez paramètres ODBC à l'endroit des titulaires de nom?
J'ai fait quelques recherches et n'ai pas trouvé de réponse définitive à mes questions.
Est-il un moyen de définir les ?
dans une requête SQL appartient à quel paramètre?
Par exemple, j'ai besoin d'effectuer quelque chose comme ceci:
SELECT * FROM myTable WHERE myField = @Param1 OR myField2 = @Param1
OR myField1 = @Param2 OR myField2 = @Param2
La même requête dans ODBC
est:
SELECT * FROM myTable WHERE myField = ? or myField2 = ? or myField1 = ?
or myField2 = ?
Est-il un moyen de dire à l'ODBC de commande de paramètre qui est qui, outre les paramètres de chargement en deux fois pour chaque valeur?
Je présume qu'il n'est pas, mais pourrait utiliser la perspective de collègues plus expérimentés ODBC programmeurs.
MODIFIER : Le pilote ODBC que j'utilise est un BBj Pilote ODBC.
ma recherche s'est jusqu'à msdn.microsoft.com/en-us/library/ms715435%28v=vs.85%29.aspx
Ce pilote ODBC? Quelle est la version de celui-ci? Que les questions de beaucoup pour votre question.
Bonjour, l'article indique qu'il peut être utilisé uniquement avec stockées procs. Je vais garder cet article pour référence future.
Joel, je l'ai ajouté à Richard réponse, mais je vais modifier mon OP pour le rendre plus clair (c'est un BBj pilote ODBC). Merci!
Ce pilote ODBC? Quelle est la version de celui-ci? Que les questions de beaucoup pour votre question.
Bonjour, l'article indique qu'il peut être utilisé uniquement avec stockées procs. Je vais garder cet article pour référence future.
Joel, je l'ai ajouté à Richard réponse, mais je vais modifier mon OP pour le rendre plus clair (c'est un BBj pilote ODBC). Merci!
OriginalL'auteur bltss | 2011-06-14
Vous devez vous connecter pour publier un commentaire.
Dans MSDN, il est explicitement dit que vous ne pouvez pas nommer les paramètres qui est la seule façon de "raconter l'ODBC de commande de paramètre qui est qui".
Bien que la documentation peut générer un peu de confusion:
De MSDN, OdbcParameter Classe:
De ce qui précède, il semble suggérer que lorsque CommandType n'est pas défini sur Texte peut-être vous pouvez utiliser des paramètres nommés, mais malheureusement, vous ne pouvez pas:
De MSDN, OdbcCommand.Propriété CommandType:
OriginalL'auteur Rui
Merci Tom pour votre Idée et de votre code.
Cependant, le code ne fonctionnait pas correctement dans mon test.
J'ai donc écrit un simple (et au moins, dans mes tests, travail) et de la solution pour remplacer les paramètres nommés avec des paramètres positionnels (où ? est utilisé au lieu du nom):
IDbDataParameter
etnewParameter.DbType
à la place. Je suggère également de modifier la regex pour(@?@\\w+)
pour être en mesure de gérer des cas particuliers comme@@IDENTITY
qui serait touchée autrementla regex ne prend pas en charge toutes les options. par exemple. @ Dans la colonne (
My@Col
), la virgule pour un paramètre (SET `COL1` = @c1, `COL2` = @c2
) etc.OriginalL'auteur David Liebeherr
Je ne pouvais pas utiliser les paramètres nommés uniquement les paramètres positionnels.
Vous pouvez ajouter tous les paramètres que vous souhaitez comme ci-dessous, mais vous devez ajouter les valeurs dans l'ordre.
Comme vous pouvez le voir ci-dessus, les noms des paramètres n'a pas d'importance et ne sont pas utilisés. Vous pouvez même nom tous de la même manière, si vous voulez, ou mieux encore, laissez le param noms de vide
""
.OriginalL'auteur goku_da_master
Je sais que lors de l'utilisation d'Oracle Rdb ODBC, je ne peux pas utiliser les détenteurs de place nom et avoir l'utilisation de '?'; ce que je trouve extrêmement ennuyeux.
OriginalL'auteur Richard Schneider
J'ai eu besoin d'écrire du code qui gère la conversion des paramètres nommés à ordinale des paramètres avec le point d'interrogation. Mon besoin était avec OleDb au lieu de Odbc... mais je suis sûr que ce serait travailler pour vous, si vous modifiez les types.
OriginalL'auteur Tom Brothers
Voici une petite solution pour le post: https://stackoverflow.com/a/21925683/2935383
J'ai écrit ce code pour un OpenEdge (Progrès) ODBC wrapper. Le DatabaseAdapter de classe est ce wrapper et ne seront pas présentés ici.
Classe utilitaire pour le tri
Si le paramètre nommé le dernier de la chaîne, vous devez ajouter un espace.
par exemple,
"SELECT * FROM tab WHERE col = @mycol"
doit"SELECT * FROM tab WHERE col = @mycol "
OriginalL'auteur raiserle