Entity framework 如何使用Entity Framework从Oracle 11g Express数据库调用存储过程
我知道这个问题被问了很多次,我搜索了很多,没有找到一个解决方案 我使用的是Visual Studio 2012、实体框架6.1.3、.NET 4.5、ASP.NET MVC 4-应用程序。数据库和VS2012连接正常,我可以使用ADO.NET实体数据模型Entity framework 如何使用Entity Framework从Oracle 11g Express数据库调用存储过程,entity-framework,asp.net-mvc-4,visual-studio-2012,oracle11g,Entity Framework,Asp.net Mvc 4,Visual Studio 2012,Oracle11g,我知道这个问题被问了很多次,我搜索了很多,没有找到一个解决方案 我使用的是Visual Studio 2012、实体框架6.1.3、.NET 4.5、ASP.NET MVC 4-应用程序。数据库和VS2012连接正常,我可以使用ADO.NET实体数据模型.edmx与数据库进行完美的交互 我有一个简单的表类别。此表有两列CATEGORY\u ID和CATEGORY\u NAME。这些行是: CATEGORY_ID CATEGORY_NAME -----------------------
.edmx
与数据库进行完美的交互
我有一个简单的表类别
。此表有两列CATEGORY\u ID
和CATEGORY\u NAME
。这些行是:
CATEGORY_ID CATEGORY_NAME
----------------------------------
1 SELECT A CATEGORY
2 Grocery
3 Cosmetics
4 Clothing
5 Stationary
6 Electronics
7 Sweets
请给我:
类别
表的过程或函数好的,经过4个小时不休息的连续尝试,我找到了解决方案。 我在Oracle数据库中有这样一个表:
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();
}
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:调用存储过程时出现数值或值错误”,放置这一行代码后,错误消失并正常运行。很抱歉,列值没有正确显示在这里。所以我再次提供。类别ID:1,2,3,4,5,6类别名称:杂货店,化妆品,服装,文具,电子产品,糖果这不是一个工作原理-这不是一个代码编写服务,你只需抛售你的需求,然后要求代码-我们会帮助-如果你自己尝试了一些东西,你被卡住了(那么请告诉我们到目前为止您尝试了什么,并解释您遇到了什么困难)-但我们不会只为您编写全部代码!