【问题标题】:How to call a stored procedure from Oracle 11g Express Database using Entity Framework如何使用实体框架从 Oracle 11g Express 数据库调用存储过程
【发布时间】:2017-04-30 18:25:12
【问题描述】:

我知道这个问题被问了太多次,我搜索了很多,没有找到一个单一的解决方案。

我正在使用 Visual Studio 2012、Entity Framework 6.1.3、.NET 4.5、ASP.NET MVC 4 - 应用程序。数据库和 VS2012 连接正常,我可以使用 ADO.NET 实体数据模型.edmx 与数据库完美交互。

我有一张简单的桌子CATEGORIES。此表有两列 CATEGORY_IDCATEGORY_NAME。这些行是:

CATEGORY_ID      CATEGORY_NAME
----------------------------------
    1            SELECT A CATEGORY
    2            Grocery
    3            Cosmetics
    4            Clothing
    5            Stationary
    6            Electronics
    7            Sweets

请给我:

  1. Oracle 数据库代码示例为该CATEGORY 表创建过程或函数。
  2. 从过程或函数中获取行的实体框架代码示例

【问题讨论】:

  • 抱歉,列值未正确显示。所以我再次提供。 CATEGORY_ID : 1,2,3,4,5,6 CATEGORY_NAME:杂货、化妆品、服装、文具、电子产品、糖果
  • 这不是 SO 的工作方式 - 这 不是 一个代码编写服务,您只需转储您的需求,然后要求代码 - 我们'll help - 如果您自己尝试过某事但遇到了困难(那么请SHOW US到目前为止您尝试过什么,并说明在哪里 b> 你被卡住了)- 但我们不会只为你编写整个代码

标签: entity-framework asp.net-mvc-4 visual-studio-2012 oracle11g


【解决方案1】:

好的,经过 4 个小时的连续尝试,没有任何休息,我找到了解决方案。 我在 Oracle 数据库中有一个这样的表:

  1. CATEGORY_ID CATEGORY_NAME
  2. 1 选择一个类别
  3. 2 杂货店
  4. 3 化妆品
  5. 4 服装
  6. 5 固定
  7. 6 电子产品

为此我有一个程序:

create or replace PROCEDURE GET_CAT_NAME(cat_id IN number, cat_name OUT 
varchar2)
IS
BEGIN
SELECT CATEGORY_NAME INTO cat_name 
FROM CATEGORY WHERE CATEGORY_ID = cat_id;
END;​

为此,我用 C# 编写了如下代码:

using (OracleConnection objConn = new OracleConnection("DATA SOURCE=localhost:1521/XE; PASSWORD=irfan118406; USER ID=IRFAN_OMIDB22"))
        {
            OracleCommand objCmd = new OracleCommand("GET_CAT_NAME", objConn);
            objCmd.CommandType = CommandType.StoredProcedure;

            OracleParameter pout_descr = new OracleParameter("id", OracleDbType.Varchar2, 2000);

            //objCmd.Parameters.Add(new OracleParameter("id",OracleDbType.Varchar2,ParameterDirection.Input)).Value = 2;
            objCmd.Parameters.Add("cat_id",OracleDbType.Int32).Value = 3;
            objCmd.Parameters.Add("cat_name", OracleDbType.Varchar2).Direction = ParameterDirection.Output;

            objCmd.Parameters["cat_name"].Size = 20;

            try
            {
                objConn.Open();
                objCmd.ExecuteNonQuery();
                Response.Write(objCmd.Parameters["cat_name"].Value.ToString());

            }
            catch (Exception ex)
            {
                Response.Write(ex.ToString());
            }

            objConn.Close();
        }

代码完美运行,没有任何错误。

更新:

objCmd.Parameters["cat_name"].Size = 20;

这行代码超级重要,连续3个小时报错:“ORA-06502: PL/SQL: numeric or value error calling a stored procedure”,放上这行代码后,错误消失了运行良好。

【讨论】:

    猜你喜欢
    • 2014-03-24
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 2011-06-14
    • 1970-01-01
    • 2015-06-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多