2011-04-15 2 views
2

Je suis nouveau dans Entity Framework et j'essaie d'appeler les procédures stockées oracle, mais sans succès. Alors Voici ma question:Appel des procédures stockées Oracle à l'aide de devart dotConnect

Comment appeler les procédures Oracle stockées en utilisant devart dotConnect?

Par exemple, je procédure stockée:

procedure get_problems(res out sys_refcursor) is 
    begin 

    open res 
    for 
    select id, name 
    from problems; 

    end; 

et de C# j'attache appeler:

using (Entities entities = new Entities()) 
{ 
    ObjectParameter res = new ObjectParameter("res", typeof(byte[])); 
    ObjectResult<PROBLEM> problems = entities.SelectAllProblems(res); 
} 

Mais il jette "EntityCommandExecutionException":

Une une erreur s'est produite lors de l'exécution de la définition de la commande . Voir l'exception interne pour plus de détails.

Voici l'exception interne:

ORA-06550: ligne 2, colonne 3: \ NPLS-00306: mauvais numéro ou types d'arguments en appel à 'GET_PROBLEMS' \ NORA -06550: ligne 2, colonne 3: \ nPL/SQL: Déclaration ignoré

je

"typeof (byte [])"

que le type ObjectParameter, parce que j'ai vu ce code généré est dans Devart Entité Developer.

p.s. Au fait, comment recommanderez-vous dotConnect dans les grands projets?

Répondre

1

Jetez un oeil à this article dans notre blog. Vous pouvez nous contacter en utilisant notre Forums ou Feedback Page.

+4

[cet article] (http://www.devart.com/blogs/dotconnect/index. php/working-avec-stored-procedures-and-ref-cursors.html) n'est pas disponible, veuillez le mettre à jour. thnx – Amir

+0

"La ressource que vous recherchez a été supprimée, son nom a été modifié ou est temporairement indisponible." Veuillez mettre à jour le lien et de préférence ajouter le code approprié à cette réponse afin que le futur linkrot ne l'invalide pas. – BCdotWEB

0

Je sais que cela a été demandé il y a un certain temps, mais il pourrait aider quelqu'un d'autre car il m'a fallu un certain temps pour comprendre cela. Voici comment appeler un proc stocké (SID_PGet) dans un package (P_SID) et renvoyer une seule valeur de chaîne à l'aide de DotConnect. (Cela ne renvoie qu'une seule valeur - j'essaie actuellement de savoir comment retourner un sys_refcursor).

Voici le proc stocké:

PROCEDURE SID_PGet(io_SID OUT varchar2) is 
Begin 
    io_SID:=GetSID; -- GetSID returns a unique varchar value 
End; 

Et dans le DbContext en C#:

public string GetNextSId() 
{ 
    var parameter = new Devart.Data.Oracle.OracleParameter("io_SID", Devart.Data.Oracle.OracleDbType.VarChar, ParameterDirection.Output); 
    this.Database.ExecuteSqlCommand("BEGIN P_SID.SID_PGet(:io_SID); END;", parameter); 
    var sid = parameter.Value as string; 

    return sid; 
} 
Questions connexes