Ошибка процедуры Entity Framework - Silverlight, EF, Oracle - PullRequest
0 голосов
/ 21 февраля 2012

Сообщение об ошибке: В считывателе данных, возвращенном поставщиком данных хранилища, недостаточно столбцов для запрошенного запроса.

public ObjectResult<global::System.String> P_GET_MST_CODE(global::System.String i_RES_TYPE, ObjectParameter v_RESULT)
{
    ObjectParameter i_RES_TYPEParameter;
    if (i_RES_TYPE != null)
    {
        i_RES_TYPEParameter = new ObjectParameter("I_RES_TYPE", i_RES_TYPE);
    }
    else
    {
        i_RES_TYPEParameter = new ObjectParameter("I_RES_TYPE", typeof(global::System.String));
    }

    return base.ExecuteFunction<global::System.String>("P_GET_MST_CODE", i_RES_TYPEParameter, v_RESULT);
}

Ниже приведено определение хранимой процедуры.

<Function Name="P_GET_MST_CODE" Aggregate="false" BuiltIn="false" NiladicFunction="false" IsComposable="false" ParameterTypeSemantics="AllowImplicitConversion" Schema="LEGACY">
  <Parameter Name="I_RES_TYPE" Type="varchar2" Mode="In" />
  <Parameter Name="V_RESULT" Type="varchar2" Mode="Out" />
</Function>

Может кто-нибудь помочь мне решить эту проблему?

1 Ответ

0 голосов
/ 22 февраля 2012

Я решил это, избегая объекта подключения объекта. : -)

До сих пор, похоже, не поддерживается параметр OUT базы данных ORACLE.

Ниже приведен пример измененного кода.

using System.Data;
using System.Data.Common;
using System.Data.EntityClient;
using System.ServiceModel.DomainServices.EntityFramework;
using System.ServiceModel.DomainServices.Server;
using Oracle.DataAccess.Client;

.......

[Invoke]
public string method(string OTL)
{
    DbCommand cmd = (((EntityConnection)this.ObjectContext.Connection).StoreConnection).CreateCommand();
    cmd.CommandType = System.Data.CommandType.StoredProcedure;
    cmd.CommandText = "LoveMe";

    OracleParameter ep = new OracleParameter("I_RES_TYPE", OTL);
    ep.OracleDbType = OracleDbType.Varchar2;
    ep.Direction = ParameterDirection.Input;

    OracleParameter epV_RESULT = new OracleParameter("V_RESULT", null);
    epV_RESULT.OracleDbType = OracleDbType.Varchar2;
    epV_RESULT.Size = 30;
    epV_RESULT.Direction = ParameterDirection.Output;

    cmd.Parameters.Add(ep);
    cmd.Parameters.Add(epV_RESULT);

    cmd.Connection.Open();
    cmd.ExecuteNonQuery();

    string result = cmd.Parameters[1].Value.ToString(); //What I want to get.

    cmd.Connection.Close();

    return result;
}
...