9
votes

Ora-01008 avec toutes les variables liées

J'utilise system.data.oracleclient qui fonctionne par paramètre par nom et vérifiant que le commandement et les paramètres sont synchronisés: xxx

encore un Requête ora-01008: toutes les variables liées . Lors de l'insertion manuelle des valeurs de paramètres dans le commandement incriminé, la requête fonctionne, les valeurs de CommandText et de paramètres doivent donc être ok. J'utilise: comme préfixe à la fois pour les variables et les noms de paramètres et que cela fonctionne pour les autres requêtes.

Comment puis-je identifier la cause de cette exception?


4 commentaires

Avez-vous le code qui fait les questions? Aussi, avez-vous essayé avec les clients Oracle (ou d'autres fournisseurs) .NET? Je pense que Microsoft ne fournit plus le client Oracle.


Je me souviens vaguement d'un problème avec l'un des clients Oracle que les paramètres devaient être liés exactement dans la même commande qu'ils apparaissaient dans la requête ou que cela ne fonctionnerait pas - cela pourrait-il être le problème ici?


@Nick - La commande était une mise à jour avec environ 40 paramètres afin de la lisibilité et des raisons IP-IP-je les ai laissées tomber. J'ai essayé avec Odt.Net d'Oracle mais j'ai eu du mal à le déployer. (Voir aussi Commentaire ci-dessous.)


Je voulais dire odp.net . Je vais essayer de nouveau avec cela maintenant qu'il pourrait y avoir une raison pratique de l'utiliser. Étant donné que le code d'erreur est de Oracle, je pense que tous les paramètres sont transférés, mais peut-être que cela a quelque chose à voir avec des types de données? Je crée des paramètres comme celui-ci nouvel oracleparamètre (": myParam", obj.myparam) .


5 Réponses :


0
votes

Je crois que Microsoft a déprécié oracleclient dans le cadre de Ado.net il y a environ 2 ans.

Vous voudrez peut-être envisager d'utiliser les composants d'accès aux données d'Oracle (ODAC ODP.NET). Facile à accumuler (et à vérifier les comptes) des paramètres à l'aide de la classe OracleParameter. Configuration et installer Docs Found ici . Oh, vous pouvez également entrer dans leur soutien de leur entité (et Linq) également (toujours bêta je pense?).

quelque chose à considérer sérieusement quand même.


1 commentaires
3
votes

Si vous passez null comme valeur de paramètre, vous obtenez "Toutes les variables liées" si vous passez dbnull.value vous obtenez une erreur d'exécution quelque part dans l'oracleclient. Passez NULL, utilisez string.empty , oracleclient le convertit sur null pour tout type de base de données.


0 commentaires

1
votes

Si vous avez plus d'un paramètre, vous devez définir bindbyName à vrai . Par exemple: xxx


0 commentaires

0
votes

Basé sur les réponses et les commentaires ci-dessus, je me suis assuré que ce qui suit pour résoudre ce problème:

    Les paramètres
  • sont liés dans le même ordre qu'ils apparaissent dans la requête
  • Type de paramètre est spécifié
  • Si la même valeur de paramètre est requise plus d'une fois dans la SQL, nommez chaque paramètre différemment dans le SQL (pas sûr si cela est requis)

    oracleparamètre [] orclparams = nouveau oracleparameter [] { Nouveau OracleParameter { ParamètreName = "param1", Oracledbtype = oracledbtype.varchar2, Valeur = "abc"}, Nouveau OracleParameter { Paramètre nom = "param2", Oracledbtype = oracledbtype.varchar2, Valeur = "abc"}, Nouveau OracleParameter { Paramètre nom = "date1", Oracledbtype = oracledbtype.date, Valeur = mydate} }; SQLQUERY (SQLQUERY, ORCLPARAMS.TOLIST ());


0 commentaires