2011-04-15 54 views
2

我是Entity Framework的新手,嘗試調用Oracle存儲過程,但沒有成功。所以這裏是我的問題:使用devart調用Oracle存儲過程dotConnect

如何使用devart dotConnect調用oracle存儲過程?

例如,我的存儲過程:

procedure get_problems(res out sys_refcursor) is 
    begin 

    open res 
    for 
    select id, name 
    from problems; 

    end; 

而且從C#我綁撥打:

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

但它拋出 「EntityCommandExecutionException」:

的執行 命令定義時發生錯誤。有關詳細信息,請參閱內部 例外。

這裏是內部異常:

ORA-06550:行2,列 3:\ NPLS-00306:錯誤數量或類型的呼叫參數 到 'GET_PROBLEMS' \ NORA -06550:線2, 第3欄:\ NPL/SQL:語句忽略

我用

「的typeof(字節[])」

爲ObjectParameter類型,因爲我在Devart實體開發看到這個的生成代碼。

p.s.順便說一下,您如何在大型項目中推薦dotConnect?

回答

1

在我們的博客中查看this article
您可以使用我們的ForumsFeedback Page與我們聯繫。

+4

[本條](http://www.devart.com/blogs/dotconnect/index。 php/working-with-stored-procedures-and-ref-cursors.html)不可用,請更新。 thnx – Amir 2014-02-23 16:07:59

+0

「您正在查找的資源已被刪除,名稱已更改或暫時不可用。」請更新鏈接,並最好將相關代碼添加到此答案,以便將來的linkrot不會使其無效。 – BCdotWEB 2015-08-04 11:30:16

0

我知道這是前一段時間被問到的,但它可能會幫助其他人,因爲我花了一段時間才弄清楚這一點。以下是我們如何在包中調用存儲過程(SID_PGet)(P_SID)並使用DotConnect返回單個字符串值。 (這隻返回一個值 - 我目前正在試圖找出如何返回一個sys_refcursor)。

這裏的存儲過程:

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

而在的DbContext在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; 
}