Oracle.DataAccess (ODP.NET) de la Matrice de Liaison “la Valeur n'est pas comprise dans la plage attendue”
mon scénario
je suis en utilisant ODP.NET fournisseur oracle avec c# 3.5, et je suis en train de passer un tableau en paramètre à une procédure...comme ceci:
var paramNames = new OracleParameter();
paramNames.CollectionType = OracleCollectionType.PLSQLAssociativeArray;
paramNames.ParameterName = "P_JOB_TITLE";
paramNames.Size = 2;
paramNames.Value = new string[2]{ "name1", "name1" };
cmd.Parameters.Add(paramNames);
lors de l'exécution de code va à paramNames.Valeur = new string[2]{ "nom1", "nom1" }; il rattrape cette erreur
"La valeur n'est pas comprise dans la plage attendue"
Quelqu'un peut-il résoudre ce problème?
INFORMATIONS SUPPLÉMENTAIRES
Précisant OracleDbType l'erreur est corrigée, mais l'exécution de me donner quelques erreurs
paramNames.OracleDbType = OracleDbType.Varchar2;
"Impossible de convertir l'objet de type 'System.String [] "type de Système".IConvertible'."
mon but est de faire quelque chose comme ceci
http://aspalliance.com/621_Using_ODPNET_to_Insert_Multiple_Rows_within_a_Single_Round_Trip.3
UN AUTRE PROBLÈME AVEC LE PARAMÈTRE DE SORTIE
L'insertion d'un paramètre de sortie, comme cette
paramNames = new OracleParameter();
paramNames.ParameterName = "O_JOB_ID";
paramNames.Size = 3;
paramNames.Direction = ParameterDirection.Output;
paramNames.OracleDbType = OracleDbType.Int32;
paramNames.Value = new int[3] { 0, 0, 0 }; ;
cmd.Parameters.Add(paramNames);
il est correctement rempli lorsque ExecuteNonQuery fini. Par exemple, la pls-procédure sql effectue 3 inserts et je retourne la ligne-id de chaque tableau enregistrement.
Mais j'ai quelque chose va mal, par exemple isnerting la 2e rangée, l'ensemble des paramètres de SORTIE (array) sont toujours définie sur 0. J'ai attendu au moins la params[0].la valeur a été renforcée
Grâce
OriginalL'auteur user756037 | 2011-06-20
Vous devez vous connecter pour publier un commentaire.
Je pense que vous essayez de fusionner un Array Bind {simplement de la liaison d'un tableau à un paramètre à exécuter plusieurs fois -- c'est comment l'exemple dans le lien que vous avez fourni n'} avec un Tableau Associatif {re: PLSQLAssociativeArray avec une ENTRÉE param de TABLE DE}.
Puisque vous n'avez pas de poste de votre colis/proc que vous êtes en cours d'exécution, je suis en supposant que vous faites quelque chose comme ceci (juste mettre cela à valider l'hypothèse)
Pour l'exécution de cette comme l'auteur de l'article dont vous avez besoin pour utiliser ArrayBindCount (consultez ce lien, il a aussi un exemple).
Cela indique aussi, si vous avez de multiples paramètres, il va attendre un TABLEAU pour chacun.
Maintenant d'avoir cette exécutée pour toutes les P_JOB_TITLE() que vous passez dans
Pour un plSQLAssociativeArray exemple, ont un regard sur les échantillons fournis lors de l'installation de l'ODP @ %ORA_HOME%\odp.net\samples\2.x\AssocArray
et pour array bind exemples (comme à partir du lien que vous avez fourni)
@ %ORA_HOME%\odp.net\samples\2.x\ArrayBind
faites-vous toute la gestion des exceptions dans le code pl/sql bloc en cours d'exécution? vous devriez être en mesure de capturer et de gérer (ou au moins pas interrompre les autres éléments dans le tableau) via ne permettant pas l'exception à bulle.
je n'appelle que cmd.ExecuteNonQuery(); try{}catch{} instruction, et enfin{} j'ai vérifier les paramètres
si vous ne pouvez pas modifier la procédure pour encapsuler le message d'erreur, vous pouvez être en mesure de faire la même chose via un anon. bloquer dans votre C# avec la gestion des exceptions. par exemple, " COMMENCER maproc(:myParam); exception lors de l' **** fin;'
j'ai déjà mis en place une gestion des exceptions dans mon c# fonction. je try {} catch {} ExecuteNonQuery() code. Il attraper comme prévu (violation de mon test de contrainte de clé unique pour la ligne 2), mais ensuite les paramètres de SORTIE sont toutes les blanchis
OriginalL'auteur Harrison