J'ai du code qui génère une requête SQL basée sur plusieurs valeurs. Le résultat final nécessite l'appel de deux bases de données pour créer un seul DataTable
. La deuxième base de données est connectée par un lien de base de données que nous utilisons tout le temps. Le # C lui-même est solide et la chaîne de requête de résultat final est le suivant:ORA-02019 on String Concaténation SQL à partir de C# using Oracle.DataAccess.Client
SELECT distinct HOME.MISC.PROCEDURE(H.WIDGET, H.FIDGET),
H.WIDGET ,
(SELECT WIDGETYPE
FROM [email protected] --here is where it all goes bad, bad bad.
WHERE UPPER(WIDGET_SN) = UPPER(H.WIDGET)
) ,
H.FIDGET,
HOME.STUFF.ANOTHERPROCEDURE(H.WIDGET)
FROM HOME.WIDGET_HEAP H
INNER JOIN HOME.WIDGET_LIST L
ON H.WIDGET = L.WIDGET_ID
WHERE UPPER(L.WIDGET_ID) = UPPER('1337-H4X')
Il est évident que ceux-ci ne sont pas de vrais noms de champ ou de valeurs, mais vous obtenez le point. Lorsque je soulève la requête de la variable elle-même à un point d'arrêt, je peux coller le SQL dans SQL Developer et cela fonctionne très bien. Quand je lance la requête et essayer de remplir mon DataTable
dans mon programme, je reçois:
ORA-02019: Description de la connexion pour la base de données à distance introuvable;
Le nom d'utilisateur/TNS/etc etc est défini correctement, car nous avons de nombreux programmes qui utilisent les mêmes informations pour établir leurs connexions. Est-ce que je fais quelque chose de mal ici en utilisant le lien? J'ai cherché Google et ici et trouvé de nombreuses références à l'erreur, mais rien de tout à fait comme cette situation.
C'était le cas. Les autres applications consommant les mêmes données avaient apparemment le login correct codé en dur (!) Et l'utilisaient quand elles avaient besoin d'autorisations élevées, les gardant complètement hors des fichiers de configuration. J'ai changé cela dans ces applications pour utiliser une chaîne importée, cryptée, et donné aux applications l'accès à une connexion "Elevée" si nécessaire. – CDove