«Значение не попадает в ожидаемый диапазон» при передаче UDT в хранимую процедуру - PullRequest
1 голос
/ 03 февраля 2020

Вот мое сопоставление классов с UDT в Oracle (очень просто):

[OracleCustomTypeMapping("PORTAL_OPS.SHAPEUDT")]
public class Shape : IOracleCustomType, IOracleCustomTypeFactory
{
 [OracleObjectMapping("SIDES")]
 public Int32 Sides { get; set; }

 public string UdtTypeName
 {
      get
      {
           Attribute attr = Attribute.GetCustomAttribute(this.GetType()
                                    , typeof(OracleCustomTypeMappingAttribute));

           return (attr != null) ?
           ((OracleCustomTypeMappingAttribute)attr).UdtTypeName
            :
           String.Empty;
      }
 }

 public void FromCustomObject(OracleConnection con, IntPtr pUdt)
 {
      OracleUdt.SetValue(con, pUdt, "SIDES", Sides);
 }

 public void ToCustomObject(OracleConnection con, IntPtr pUdt)
 {
      Sides = (int)OracleUdt.GetValue(con, pUdt,"SIDES");
 }

 public IOracleCustomType CreateObject()
 {
      return new Shape();
 }

}

Чтобы вызвать хранимую процедуру:

 if (Command.Connection.State == ConnectionState.Closed)
 {
      Command.Connection.Open();
 }

 // setting up the parameter
 OracleParameter param = new OracleParameter();
 param.Direction = ParameterDirection.Input;
 param.UdtTypeName = udt.UdtTypeName;
 param.DbType = DbType.Object;
 param.OracleDbType = OracleDbType.Object;
 param.Value = udt;


 Command.CommandText = "PORTAL_OPS.PROC_CREATE_SHAPE";
 Command.CommandType = CommandType.StoredProcedure;
 Command.Parameters.Add(param);
 Command.ExecuteNonQuery();

Реализация:

Shape shape = new Shape();
shape.sides = 4;
//invoking the stored procedure call (see code above)

Я не мог понять, почему я продолжаю получать "Значение не попадает в ожидаемый диапазон" , Я смотрел на это все выходные ... не повезло. Любая помощь очень ценится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...