C# 如何在c中声明MDSYS.Sdo_几何体#
我在Oracle数据库中有一个存储过程,它将MDSYS.Sdo_几何体和数字类型作为输入,并给出t_t_out_house_details对象和p_return_cd numberC# 如何在c中声明MDSYS.Sdo_几何体#,c#,oracle,C#,Oracle,我在Oracle数据库中有一个存储过程,它将MDSYS.Sdo_几何体和数字类型作为输入,并给出t_t_out_house_details对象和p_return_cd number PROCEDURE prc_get_impacted_houses(p_polygon_geom IN MDSYS.Sdo_Geometry, p_imkl_id IN NUMBER,
PROCEDURE prc_get_impacted_houses(p_polygon_geom IN MDSYS.Sdo_Geometry,
p_imkl_id IN NUMBER,
p_out_house_details OUT t_t_out_house_details,
p_return_cd OUT NUMBER) IS
v_proj_dist_limit NUMBER;
v_out_house_details t_t_out_house_details := t_t_out_house_details();
v_net_cd VARCHAR2(6);
v_subnet_nr NUMBER(5);
v_cable_number NUMBER(3);
invalid_geometry EXCEPTION;
我想从C#调用这个过程,并将结果(return)显示为输出。我要声明MDSYS.Sdo_几何体数据类型。我不知道我应该声明什么类型。我试图使用空间类geomtry声明,但我不知道如何使用它。我在网上找不到这样的例子
这是我的c#代码:
有解决办法
您应该定义UDTs:MDSYS.SDO_几何体:
using System;
using System.Collections.Generic;
using System.Text;
using Oracle.DataAccess.Types;
using Oracle.DataAccess.Client;
using System.Data;
namespace some.namespace
{
[OracleCustomTypeMappingAttribute("MDSYS.SDO_GEOMETRY")]
public class SdoGeometry : OracleCustomTypeBase<SdoGeometry>
{
private enum OracleObjectColumns { SDO_GTYPE, SDO_SRID, SDO_POINT, SDO_ELEM_INFO, SDO_ORDINATES }
private decimal? sdo_Gtype;
[OracleObjectMappingAttribute(0)]
public decimal? Sdo_Gtype
{
get { return sdo_Gtype; }
set { sdo_Gtype = value; }
}
private decimal? sdo_Srid;
[OracleObjectMappingAttribute(1)]
public decimal? Sdo_Srid
{
get { return sdo_Srid; }
set { sdo_Srid = value; }
}
private SdoPoint point;
[OracleObjectMappingAttribute(2)]
public SdoPoint Point
{
get { return point; }
set { point = value; }
}
private decimal[] elemArray;
[OracleObjectMappingAttribute(3)]
public decimal[] ElemArray
{
get { return elemArray; }
set { elemArray = value; }
}
private decimal[] ordinatesArray;
[OracleObjectMappingAttribute(4)]
public decimal[] OrdinatesArray
{
get { return ordinatesArray; }
set { ordinatesArray = value; }
}
[OracleCustomTypeMappingAttribute("MDSYS.SDO_ELEM_INFO_ARRAY")]
public class ElemArrayFactory : OracleArrayTypeFactoryBase<decimal> {}
[OracleCustomTypeMappingAttribute("MDSYS.SDO_ORDINATE_ARRAY")]
public class OrdinatesArrayFactory : OracleArrayTypeFactoryBase<decimal> {}
public override void MapFromCustomObject()
{
SetValue((int)OracleObjectColumns.SDO_GTYPE, Sdo_Gtype);
SetValue((int)OracleObjectColumns.SDO_SRID, Sdo_Srid);
SetValue((int)OracleObjectColumns.SDO_POINT, Point);
SetValue((int)OracleObjectColumns.SDO_ELEM_INFO, ElemArray);
SetValue((int)OracleObjectColumns.SDO_ORDINATES, OrdinatesArray);
}
public override void MapToCustomObject()
{
Sdo_Gtype = GetValue<decimal?>((int)OracleObjectColumns.SDO_GTYPE);
Sdo_Srid = GetValue<decimal?>((int)OracleObjectColumns.SDO_SRID);
Point = GetValue<SdoPoint>((int)OracleObjectColumns.SDO_POINT);
ElemArray = GetValue<decimal[]>((int)OracleObjectColumns.SDO_ELEM_INFO);
OrdinatesArray = GetValue<decimal[]>((int)OracleObjectColumns.SDO_ORDINATES);
}
public static OracleParameter CreateSdoGeometry(string parameterName, SdoGeometry objGeometry, ParameterDirection direction = ParameterDirection.Input)
{
OracleParameter customParameter = new OracleParameter();
customParameter.ParameterName = parameterName;
customParameter.OracleDbType = OracleDbType.Object;
customParameter.UdtTypeName = "MDSYS.SDO_GEOMETRY";
customParameter.Direction = direction;
customParameter.Value = objGeometry;
return customParameter;
}
}
}
使用系统;
使用System.Collections.Generic;
使用系统文本;
使用Oracle.DataAccess.Types;
使用Oracle.DataAccess.Client;
使用系统数据;
namespace.namespace
{
[OracleCustomTypeMappingAttribute(“MDSYS.SDO_几何体”)]
公共类SDogometry:OracleCustomTypeBase
{
私有枚举OracleObjectColumns{SDO_GTYPE、SDO_SRID、SDO_POINT、SDO_ELEM_INFO、SDO_ORDINATES}
私有十进制?SDOgtype;
[OracleObjectMappingAttribute(0)]
公共十进制?SDOgtype
{
获取{return sdo_Gtype;}
设置{sdo_Gtype=value;}
}
私有十进制?sdo_Srid;
[OracleObjectMappingAttribute(1)]
公共十进制?Sdo_Srid
{
获取{return sdo_Srid;}
设置{sdo_Srid=value;}
}
私人点;
[OracleObjectMappingAttribute(2)]
公共点
{
获取{返回点;}
设置{point=value;}
}
私人玛丽酒店;
[OracleObjectMappingAttribute(3)]
公共玛丽酒店
{
获取{return elemArray;}
设置{elemaray=value;}
}
私有十进制数组;
[OracleObjectMappingAttribute(4)]
公共十进制数组
{
获取{return sarray;}
设置{坐标数组=值;}
}
[OracleCustomTypeMappingAttribute(“MDSYS.SDO\u ELEM\u INFO\u数组”)]
公共类ElemArrayFactory:OracleArrayTypeFactoryBase{}
[OracleCustomTypeMappingAttribute(“MDSYS.SDO_坐标_数组”)]
公共类OraclearRayFactory:OracleArrayTypeFactoryBase{}
公共覆盖无效MapFromCustomObject()
{
SetValue((int)OracleObjectColumns.SDO_GTYPE,SDO_GTYPE);
SetValue((int)OracleObjectColumns.SDO_SRID,SDO_SRID);
SetValue((int)OracleObjectColumns.SDO_点,点);
SetValue((int)OracleObjectColumns.SDO_ELEM_INFO,elemaray);
SetValue((int)OracleObjectColumns.SDO_坐标,坐标数组);
}
公共覆盖无效MapToCustomObject()
{
Sdo_Gtype=GetValue((int)OracleObjectColumns.Sdo_Gtype);
Sdo_Srid=GetValue((int)OracleObjectColumns.Sdo_Srid);
Point=GetValue((int)OracleObjectColumns.SDO_Point);
ElemArray=GetValue((int)OracleObjectColumns.SDO_ELEM_INFO);
Orderationsarray=GetValue((int)OracleObjectColumns.SDO_坐标);
}
公共静态OracleParameter CreateSdoGeometry(字符串参数名称,SdoGeometry对象几何,参数方向=参数方向.Input)
{
OracleParameter customParameter=新的OracleParameter();
customParameter.ParameterName=ParameterName;
customParameter.OracleDbType=OracleDbType.Object;
customParameter.UdtTypeName=“MDSYS.SDO_几何体”;
自定义参数。方向=方向;
customParameter.Value=物体几何;
返回自定义参数;
}
}
}
和MDSYS.SDO_点_类型:
using System;
using System.Collections.Generic;
using System.Text;
using Oracle.DataAccess.Types;
namespace some.namespace
{
[OracleCustomTypeMappingAttribute("MDSYS.SDO_POINT_TYPE")]
public class SdoPoint : OracleCustomTypeBase<SdoPoint>
{
private decimal? x;
[OracleObjectMappingAttribute("X")]
public decimal? X
{
get { return x; }
set { x = value; }
}
private decimal? y;
[OracleObjectMappingAttribute("Y")]
public decimal? Y
{
get { return y; }
set { y = value; }
}
private decimal? z;
[OracleObjectMappingAttribute("Z")]
public decimal? Z
{
get { return z; }
set { z = value; }
}
public override void MapFromCustomObject()
{
SetValue("X", x);
SetValue("Y", y);
SetValue("Z", z);
}
public override void MapToCustomObject()
{
X = GetValue<decimal?>("X");
Y = GetValue<decimal?>("Y");
Z = GetValue<decimal?>("Z");
}
}
}
使用系统;
使用System.Collections.Generic;
使用系统文本;
使用Oracle.DataAccess.Types;
namespace.namespace
{
[OracleCustomTypeMappingAttribute(“MDSYS.SDO\u POINT\u TYPE”)]
公共类SdoPoint:OracleCustomTypeBase
{
私有十进制?x;
[OracleObjectMappingAttribute(“X”)]
公共十进制?X
{
获取{return x;}
设置{x=value;}
}
私有十进制?y;
[OracleObjectMappingAttribute(“Y”)]
公共十进制
{
获取{返回y;}
设置{y=value;}
}
私有十进制?z;
[OracleObjectMappingAttribute(“Z”)]
公共十进制?Z
{
获取{return z;}
设置{z=value;}
}
公共覆盖无效MapFromCustomObject()
{
设定值(“X”,X);
设定值(“Y”,Y);
设定值(“Z”,Z);
}
公共覆盖无效MapToCustomObject()
{
X=获取值(“X”);
Y=获取值(“Y”);
Z=获取值(“Z”);
}
}
}
using System;
using System.Collections.Generic;
using System.Text;
using Oracle.DataAccess.Types;
namespace some.namespace
{
[OracleCustomTypeMappingAttribute("MDSYS.SDO_POINT_TYPE")]
public class SdoPoint : OracleCustomTypeBase<SdoPoint>
{
private decimal? x;
[OracleObjectMappingAttribute("X")]
public decimal? X
{
get { return x; }
set { x = value; }
}
private decimal? y;
[OracleObjectMappingAttribute("Y")]
public decimal? Y
{
get { return y; }
set { y = value; }
}
private decimal? z;
[OracleObjectMappingAttribute("Z")]
public decimal? Z
{
get { return z; }
set { z = value; }
}
public override void MapFromCustomObject()
{
SetValue("X", x);
SetValue("Y", y);
SetValue("Z", z);
}
public override void MapToCustomObject()
{
X = GetValue<decimal?>("X");
Y = GetValue<decimal?>("Y");
Z = GetValue<decimal?>("Z");
}
}
}