none
EF+Oracle中怎么调用存储过程? RRS feed

  • 问题

  • 例如 Oracle库中有存储过程,返回一张数据表。

    请问,在EF中怎么调用存储过程获取这个表?

    2012年4月6日 7:15

答案

  • 启禀楼上:

         

    这是Designer.cs里的,上面函数导入时都是decimal类型的,不论是都是decimal类型还是iNT32类型,在前台调用的时候都报上面的错。

    这是数据表的类型

    • 已标记为答案 楚萧萧 2012年6月13日 3:22
    2012年4月16日 7:12

全部回复

  • 或許你可以參考這篇文章。

    http://download.oracle.com/oll/obe/EntityFrameworkOBE/EntityFrameworkOBE.htm


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/

    • 已标记为答案 楚萧萧 2012年4月6日 8:04
    • 取消答案标记 楚萧萧 2012年4月11日 7:07
    2012年4月6日 7:40
  • 您好,看了您给的链接有些迷茫。Oracle中存储过程:

    CREATE OR REPLACE PROCEDURE MCERP_P_LihuiTest
    (
    P_ID number,
    cur_out Out sys_refcursor
    )
    is
    BEGIN
    Open cur_out For
         select * from mcerp_lihuitest where id=P_ID;
    END MCERP_P_LihuiTest;
    

    .DEMX文件中从数据库更新

    添加函数导入

    一点获取列信息

    如下上所示。请问该怎么做?   谢谢楼上的帮助。

    2012年4月11日 7:15
  • 您好,因为EF已经为你的数据库表创建了实体,这里若你的返回类型是一张数据库表的全部记录,就可以选择“实体”,并在下拉菜单中选择您要返回的实体类型,选择好后电机确定。这时候,这个存储过程就可以像方法一样调用了。


    Allen Li [MSFT]
    MSDN Community Support | Feedback to us

    2012年4月12日 2:57
    版主
  • 回禀楼上,按您指示做了以后,报错

    static void Main(string[] args)
            {
                
               var list = ExecProc();
                
            }
            private static List<MCERP_LIHUITEST> ExecProc()
            {
                using (OracleEntities oe = new OracleEntities())
                {
                    decimal id = 100;
                    return oe.MCERP_P_LIHUITEST(id).ToList<MCERP_LIHUITEST>();
                    //return default(List<MCERP_LIHUITEST>);// oe.mccn_p_lihuitest1().ToList<MCERP_LIHUITEST>();
                }
            }

    报以上的错。

    2012年4月12日 9:41
  • 您好,根据您贴出的错误信息,InnerException显示调用该存储过程时参数个数或类型错误。从您的存储过程来看,请您确定一下该存储过程传入的参数id,是int类型还是decimal类型,一般id不会设置为decimal类型,而您的代码中声明的id为decimal类型。另外,这个存储过程应该是根据一个id查询相应实体,在您配置存储过程时,请确认您选择的返回类型是否为正确。


    Allen Li [MSFT]
    MSDN Community Support | Feedback to us

    2012年4月13日 3:03
    版主
  • CREATE OR REPLACE PROCEDURE MCERP_P_LihuiTest
    (
    P_ID number,
    cur_out Out sys_refcursor
    )
    is
    BEGIN
    Open cur_out For
         select * from mcerp_lihuitest where id=P_ID;
    END MCERP_P_LihuiTest;
    

    这是我的存储过程。
    2012年4月13日 5:03
  • 参数是number类型的,VS里函数导入生成的是decimal
    2012年4月13日 5:19
  • 这个你需要手动在designer中将他改为int


    Allen Li [MSFT]
    MSDN Community Support | Feedback to us

    2012年4月13日 5:38
    版主
  • 改完后依然报上面的错误。

    2012年4月13日 6:36
  • 请您将InnerException展开看一下错误的具体信息。


    Allen Li [MSFT]
    MSDN Community Support | Feedback to us


    2012年4月13日 6:38
    版主
  • {"ORA-06550: 第 1 行, 第 7 列: \nPLS-00306: 调用 'MCERP_P_LIHUITEST' 时参数个数或类型错误\nORA-06550: 第 1 行, 第 7 列: \nPL/SQL: Statement ignored"}

    异常信息:

    2012年4月13日 7:18
  • 您好,请您到.designer.cs文件中找到这个存储过程影射的方法,看一下它的参数类型,在调用时赋相同的类型。


    Allen Li [MSFT]
    MSDN Community Support | Feedback to us

    2012年4月16日 6:14
    版主
  • 启禀楼上:

         

    这是Designer.cs里的,上面函数导入时都是decimal类型的,不论是都是decimal类型还是iNT32类型,在前台调用的时候都报上面的错。

    这是数据表的类型

    • 已标记为答案 楚萧萧 2012年6月13日 3:22
    2012年4月16日 7:12