2009-04-14 5 views
1

Je reçois cette erreur dans l'application ASP.NET (alors qu'il fonctionne très bien dans Oracle)plusieurs instances d'argument nommé dans la liste

PLS-00703 :: plusieurs instances d'argument nommé dans la liste

J'ai joint le code ici. Il indique l'erreur dans la dernière ligne c.-à-cmd.ExecuteNonQuery()

cmd.Parameters.AddWithValue("in_prog_id", 2); 
    cmd.Parameters.AddWithValue("in_sllr_co_id", 1); 
    cmd.Parameters.AddWithValue("in_sllr_purch_loc_nbr", 1); 
    cmd.Parameters.AddWithValue("in_byr_co_id", Convert.ToInt32(co_id)); 
    cmd.Parameters.AddWithValue("in_byr_purch_loc_nbr", purch_loc_nbr); 
    cmd.Parameters.AddWithValue("in_ing_id", ing_id); 
    cmd.Parameters.AddWithValue("in_per_id", per_id); 
    cmd.Parameters.AddWithValue("in_ing_purch_qty", "12"); 
    cmd.Parameters.AddWithValue("in_pop_sl_trck_nbr", "ECAP"); 
    cmd.Parameters.AddWithValue("in_pop_sl_cmnt_txt", dstemp.Tables["ECAP"].Rows[i][6].ToString()); 
    cmd.Parameters.AddWithValue("in_chg_by", 1333); 
    cmd.Parameters.AddWithValue("in_ing_rev_amt", dstemp.Tables["ECAP"].Rows[i][5].ToString()); 
    cmd.Parameters.AddWithValue("in_sl_typ", "ME"); 
    cmd.Parameters.AddWithValue("in_dir_sale_ind", "DIR-SL"); 
    cmd.Parameters.AddWithValue("in_intg_sl_ind", "N"); ***//character as input*** 
    cmd.ExecuteNonQuery(); 

Ceci est ma méthode dans laquelle les déclarations ci-dessus tiennent dans

private void call_proc(int i, DataSet dstemp, OracleCommand cmd) 
{ 


} 

et j'invoque cette méthode comme suit:.

cmd1 = conn3.CreateCommand(); 
    cmd1.CommandText = "pkg_sale.cre_pop_sl"; 
    cmd1.CommandType = CommandType.StoredProcedure; 
    for (int i = 0; i < ds.Tables["ECAP"].Rows.Count; ++i) 
     call_proc(i, ds, cmd1); 

Y a-t-il un problème?

Répondre

1

Cela semble être une erreur courante avec les procédures stockées Oracle et la cause la plus fréquente est que le développeur a négligé d'appeler Parameters.Clear avant l'appel répété du code.

Soit cela, soit un ou plusieurs de vos paramètres sont répétés ailleurs.

Modifier (après le poste de OP)

Il semble être la première possibilité parce que vous appelez la fonction dans une boucle. Effacer les paramètres dans la fonction en boucle et cela devrait fonctionner.

Voir this reference

1

Est-ce que vous réutilisez l'instance dans cmd pour plusieurs instructions SQL peut-être?

Il n'y a pas de doublons dans ce que vous avez posté ici, donc je doute que ce code à lui seul cause le problème.

0

je suis tombé sur un autre scénario où cela pourrait se produire si vous utilisez ODP.Net. Si vous utilisez des classes d'utilitaires pour générer votre commande (comme je le fais dans mon projet), il se peut que ce soit un travail «intelligent» derrière la scène pour dériver des paramètres de la procédure stockée.

OracleCommandBuilder.DeriveParameters((OracleCommand)command); 

Cette déclaration injecte les paramètres à l'objet de commande et si vous ajoutez vos paramètres au même objet cmd (comme vous le feriez normalement) il aura 2 paramètres avec le même nom.

Questions connexes