使用OledbConnection从MVC4调用存储过程并返回到数据集

时间:2015-11-25 03:16:49

标签: asp.net-mvc-4 oracle11g dataset

我是oracle11i的新手,使用sql developer编写一个过程来将数据插入临时表 - TEMP_ALLOC

create or replace PROCEDURE SP_GEN_ALLOC

(A integer, B, Integer, o_cRefCursor OUT SYS_REFCURSOR)

as
BEGIN
 OPEN o_cRefCursor FOR 
    SELECT colA,colB,colC FROM TEMP_ALLOC;
END SP_GEN_ALLOC;

在sql developer中执行时,数据会在临时表中填充,现在我需要在MVC4中从类中调用此过程。

OleDbConnection oConn = new OleDbConnection(System.Configuration.ConfigurationManager.AppSettings["dbConn"].ToString());
        try
        {
            oConn.Open();
            OleDbCommand cmd = new OleDbCommand();
            cmd.Connection = oConn;
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.CommandText = "SP_GEN_ALLOC";
            cmd.Parameters.Add("A", OleDbType.BigInt).Value = inta;
            cmd.Parameters.Add("B", OleDbType.BigInt).Value = intb;
            cmd.Parameters.Add("o_cRefCursor",OleDbType.xxxxx
            OleDbParameter oraP = new OleDbParameter();                
            oraP.Direction = System.Data.ParameterDirection.Output;
            cmd.Parameters.Add(oraP);
            OleDbDataReader oreader = cmd.ExecuteReader();
              while(oreader.Read())
                  {
                       ///assigning value to model
                  }

这里,在OledbParameter中,我找不到OledbType = cursor。这是正确的方法吗? 请帮助..两天以来一直坚持和谷歌搜索。 真的很感激帮助。 在此先感谢

1 个答案:

答案 0 :(得分:0)

  

删除out参数,因为无需为OUT添加参数。阅读更多https://msdn.microsoft.com/en-us/library/ms973871.aspx

   oConn.Open();
        OleDbCommand cmd = new OleDbCommand();
        cmd.Connection = oConn;
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.CommandText = "SP_GEN_ALLOC";
        cmd.Parameters.Add("A", OleDbType.BigInt).Value = inta;
        cmd.Parameters.Add("B", OleDbType.BigInt).Value = intb;                      
        OleDbDataReader oreader = cmd.ExecuteReader();
          while(oreader.Read())
              {
                   ///assigning value to model
              }