2017-03-03 1 views
0

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.

Répondre

2

Puisque vous pouvez l'exécuter dans SQLDeveloper très bien, cela ressemble à un problème avec la visibilité de db_link. Ce lien est-il un lien de base de données publique? Si c'est le cas, tous les utilisateurs auront accès. Si ce n'est pas le cas, seul l'utilisateur connecté à SQLDeveloper y aura accès. Si tel est le cas, l'utilisateur de l'application est-il le même utilisateur? Si ce n'est pas le cas, il n'y a pas accès. La clé est dans la description de l'erreur, la description de la connexion n'a pas été trouvée. Assurez-vous que votre application a une visibilité sur ce lien.

+0

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