2009-06-04 9 views
1

Maintenant, je sais que cela a déjà été demandé. Mais j'ai doublement vérifié que tous les paramètres sont corrects et qu'il n'y a pas de fautes de frappe. Je reçois toujours l'erreur. Est-ce que quelqu'un pourrait me guider ici? Je suis proche de la fin de mon esprit!Erreur Oracle .NET - Nombre incorrect ou type d'arguments

CREATE OR REPLACE PROCEDURE VWT.WUA_DELETE_FP_REQUEST 
    (i_pLDAPUserName IN varchar2, 
     i_pIReasonCode IN number, 
     i_pLastName IN varchar2, 
     i_pFirstName IN varchar2, 
     i_pDealerID IN number, 
     i_pAddr1 IN varchar2, 
     i_pAddr2 IN varchar2, 
     i_pCity IN varchar2, 
     i_pState IN varchar2, 
     i_pZip IN varchar2, 
     i_pBusinessEmail IN varchar2, 
     i_pBusinessPhone IN varchar2, 
     i_pReviewDate IN Date, 
     i_pReviewedByWhom IN varchar2, 
     i_pDealersRepID IN varchar2, 
     i_pComments IN varchar2, 
     i_pPrivacyUsageFlag IN varchar2, 
     i_pDealersBranchID IN varchar2, 
     i_pPrivacyUsageDate IN date, 
     i_pMarketingFlag IN varchar2, 
     i_pMarketingDate IN date, 
     i_pWorkCountry IN varchar2, 
     i_pOperator IN varchar2, 
     o_return_status OUT integer, 
     o_error_desc OUT varchar2 
) 

=========================================== =============================

code à exécuter la procédure

OracleParameter ldapUserName = new OracleParameter 
     ("i_pLDAPUserName", OracleType.VarChar, 1024); 
    ldapUserName.Direction = ParameterDirection.Input; 
    ldapUserName.Value = ldapUserName_; 
    command.Parameters.Add(ldapUserName); 

OracleParameter reasonCode = new OracleParameter 
     ("i_pIReasonCode", OracleType.Number); 
    reasonCode.Direction = ParameterDirection.Input; 
    reasonCode.Value = reasonCode_; 
    command.Parameters.Add(reasonCode); 

OracleParameter lastName = new OracleParameter 
     ("i_pLastName", OracleType.VarChar, 1024); 
    lastName.Direction = ParameterDirection.Input; 
    lastName.Value = userDetail.LastName ?? String.Empty; 
    command.Parameters.Add(lastName); 

OracleParameter firstName = new OracleParameter 
     ("i_pFirstName", OracleType.VarChar, 1024); 
    firstName.Direction = ParameterDirection.Input; 
    firstName.Value = userDetail.FirstName ?? String.Empty; 
    command.Parameters.Add(firstName); 

OracleParameter dealerID = new OracleParameter 
      ("i_pDealerID", OracleType.Number); 
    dealerID.Direction = ParameterDirection.Input; 
    dealerID.Value = 
      Int32.Parse(String.IsNullOrEmpty(userDetail.DealerID) ? "0" : userDetail.DealerID); 
    command.Parameters.Add(dealerID); 

OracleParameter address1 = new OracleParameter 
      ("i_pAddr1", OracleType.VarChar, 1024); 
    address1.Direction = ParameterDirection.Input; 
    address1.Value = userDetail.WorkAddress1 ?? String.Empty; 
    command.Parameters.Add(address1); 

OracleParameter address2 = new OracleParameter 
      ("i_pAddr2", OracleType.VarChar, 1024); 
     address2.Direction = ParameterDirection.Input; 
     address1.Value = userDetail.WorkAddress2 ?? String.Empty; 
     command.Parameters.Add(address2); 

OracleParameter city = new OracleParameter 
      ("i_pCity", OracleType.VarChar, 1024); 
    city.Direction = ParameterDirection.Input; 
    city.Value = userDetail.City ?? String.Empty; 
    command.Parameters.Add(city); 

OracleParameter state = new OracleParameter 
      ("i_pState", OracleType.VarChar, 1024); 
    state.Direction = ParameterDirection.Input; 
    state.Value = userDetail.State ?? String.Empty; 
    command.Parameters.Add(state); 

OracleParameter zip = new OracleParameter 
      ("i_pZip", OracleType.VarChar, 1024); 
    zip.Direction = ParameterDirection.Input; 
    zip.Value = userDetail.Zip ?? String.Empty; 
    command.Parameters.Add(zip); 

OracleParameter email = new OracleParameter 
      ("i_pBusinessEmail", OracleType.VarChar, 1024); 
    email.Direction = ParameterDirection.Input; 
    email.Value = userDetail.EMail ?? String.Empty; 
    command.Parameters.Add(email); 

OracleParameter phone = new OracleParameter 
      ("i_pBusinessPhone", OracleType.VarChar, 1024); 
     phone.Direction = ParameterDirection.Input; 
     phone.Value = userDetail.Phone ?? String.Empty; 
     command.Parameters.Add(phone); 

OracleParameter reviewDate = new OracleParameter 
      ("i_pReviewDate", OracleType.DateTime); 
    reviewDate.Direction = ParameterDirection.Input; 
    reviewDate.Value = userDetail.ReviewedDate ?? (object)DBNull.Value; 
    command.Parameters.Add(reviewDate); 

OracleParameter reviewedbyWhom = new OracleParameter 
      ("i_pReviewedByWhom", OracleType.VarChar, 1024); 
    reviewedbyWhom.Direction = ParameterDirection.Input; 
    reviewedbyWhom.Value = userDetail.ReviewedByWhom ?? String.Empty; 
    command.Parameters.Add(reviewedbyWhom); 

OracleParameter repID = new OracleParameter 
      ("i_pDealersRepID", OracleType.VarChar, 1024); 
    repID.Direction = ParameterDirection.Input; 
    repID.Value = userDetail.RepID ?? String.Empty; 
    command.Parameters.Add(repID); 

OracleParameter comments = new OracleParameter 
      ("i_pComments", OracleType.VarChar, 1024); 
    comments.Direction = ParameterDirection.Input; 
    comments.Value = userDetail.Comments ?? String.Empty + comments_; 
    command.Parameters.Add(comments); 

OracleParameter privacyUsageFlag = new OracleParameter 
      ("i_pPrivacyUsageFlag", OracleType.VarChar, 1024); 
    privacyUsageFlag.Direction = ParameterDirection.Input; 
    privacyUsageFlag.Value = userDetail.PrivacyAndUsageReadFlag ?? String.Empty; 
    command.Parameters.Add(privacyUsageFlag); 

OracleParameter dealersBranchID = new OracleParameter 
      ("i_pDealersBranchID", OracleType.VarChar, 1024); 
    dealersBranchID.Direction = ParameterDirection.Input; 
    dealersBranchID.Value = userDetail.DealerBranchID ?? String.Empty; 
    command.Parameters.Add(dealersBranchID); 

OracleParameter privacyUsageDate = new OracleParameter 
      ("i_pPrivacyUsageDate", OracleType.DateTime); 
    privacyUsageDate.Direction = ParameterDirection.Input; 
    privacyUsageDate.Value = 
      userDetail.PrivacyAndUsageReadDate ??(object)DBNull.Value; 
    command.Parameters.Add(privacyUsageDate); 

OracleParameter marketingFlag = new OracleParameter 
      ("i_pMarketingFlag", OracleType.VarChar, 1024); 
    marketingFlag.Direction = ParameterDirection.Input; 
    marketingFlag.Value = userDetail.SendMarketingEmailFlag ?? String.Empty; 
    command.Parameters.Add(marketingFlag); 

OracleParameter marketingDate = new OracleParameter 
      ("i_pMarketingDate", OracleType.DateTime); 
    marketingDate.Direction = ParameterDirection.Input; 
    marketingDate.Value = 
      userDetail.SendMarketingEmailDate ?? (object)DBNull.Value; 
    command.Parameters.Add(marketingDate); 

OracleParameter country = new OracleParameter 
      ("i_pWorkCountry", OracleType.VarChar, 1024); 
    country.Direction = ParameterDirection.Input; 
    country.Value = userDetail.Country ?? String.Empty; 
    command.Parameters.Add(country); 

OracleParameter oper = new OracleParameter 
      ("i_pOperator", OracleType.VarChar, 1024); 
    oper.Direction = ParameterDirection.Input; 
    oper.Value = operator_; 
    command.Parameters.Add(oper); 

OracleParameter returnStatus = new OracleParameter 
      ("o_return_status", OracleType.Int16); 
    returnStatus.Direction = ParameterDirection.Output; 
    command.Parameters.Add(returnStatus); 

OracleParameter errorDesc = new OracleParameter 
     ("o_error_desc", OracleType.VarChar, 1024); 
    errorDesc.Direction = ParameterDirection.Output; 
    command.Parameters.Add(errorDesc); 

Répondre

2

Sans une erreur spécifique qui est survenant, il est difficile de donner une réponse précise. Le code que vous avez posté pourrait être correct. Il n'y a rien que je vois qui soit faux dans tous les scénarios. Cependant, voici quelques endroits que je commencerais à chercher.

Votre instruction de commande est-elle formatée correctement? Est-ce que tous les paramètres VarChar acceptent 1024 caractères? Est-ce que certaines de vos chaînes vont dans une colonne VarChar plus longue que 1024? Le type returnStatus de Int16 est-il correct?

De toute façon, ce sont quelques endroits pour commencer, si vous postez quelques informations plus détaillées sur le problème, vous pouvez obtenir plus de réponses.

+2

La valeur du champ adresse2 n'a jamais été définie. Bien que la base de données autorise null, il doit être un DBNull.Value au lieu d'un .NET null. C'est là que l'exception était lancée. Mon erreur !! L'un des périls de faire copier/coller. :) – aliensurfer

0

DealerID est déclarée Nombre, mais passé en tant que chaîne.

Je blâme les barres de défilement, ne voit pas le Int32.Parse()

+0

Je suis typecasting. Ne devrait-il pas en prendre soin? – aliensurfer

+0

Oui, sauf lorsque int.Parse renvoie une exception, ce que vous avez pour DealerID devrait fonctionner comme prévu. –

+0

Totalement compris, j'ai raté mon premier coup d'œil. –

1

J'ai regardé votre code et je n'ai rien vu de suspect. S'il vous plaît, ne pas downvote moi mais ... dans des circonstances similaires, je vais faire un test très stupide (j'admets, c'est stupide): commenter tous les paramètres sauf le premier dans la déclaration de procédure et dans le code l'exécuter, puis tester: s'il y a une erreur, vous saurez que c'est avec le premier paramètre; Si aucune erreur n'apparaît, supprimez le commentaire du deuxième paramètre dans la procédure et dans le code.
JE SAIS: c'est stupide, long et agaçant ... mais si vous vous sentez vraiment coincé dans un coin, cela pourrait vous donner un indice plus précis sur l'origine du problème.

0

Aucune expérience avec .Net mais je me demande si OracleType.Int16 est le type de données correct pour le paramètre INTEGER (qui selon un numéro de http://msdn.microsoft.com/en-us/library/system.data.oracleclient.oracletype(VS.71).aspx, attend un OracleType.Number)?

OracleType.Int16: "Il ne s'agit pas d'un type de données Oracle natif, mais il est fourni pour améliorer les performances lors de la liaison des paramètres d'entrée."

Questions connexes