我在Oracle数据库中有一个存储过程,它将MDSYS.Sdo_Geometry和数字类型作为输入,并给予t_t_out_house_details对象和p_return_cd编号。
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#调用这个过程,并将结果(返回)作为输出显示。我想声明MDSYS.Sdo_Geometry数据类型。我不知道应该声明什么类型。我试图使用空间类geomtry声明,但我不知道如何使用它。我在互联网上找不到任何这样的例子。
这是我C#代码:
static public void CallingStoredProcedure(GeometryPolygon PPolygonGeom, int PImklId)
{
//conection to the database
using (OracleConnection conn = new OracleConnection("Data Source=; User ID=; Password="))
{
OracleCommand cmd = new OracleCommand();
conn.Open();
cmd = new OracleCommand("prc_get_impacted_houses", conn);
OracleParameter op = null;
cmd.CommandType = CommandType.StoredProcedure;
//cmd.Parameters.Add("p_polygon_geom", OracleType.).Value = PPolygonGeom;
cmd.Parameters.Add("p_imkl_id", OracleDbType.Int32).Value = PImklId;
op = new OracleParameter("p_return_cd", OracleDbType.Int32);
op.Direction = ParameterDirection.Output;
cmd.Parameters.Add(op);
//CALL PROCEDURE
try
{
cmd.ExecuteNonQuery();
Console.WriteLine(cmd.Parameters["p_return_cd"].Value);
}
catch (Exception ex)
{
throw new Exception("Error " + ex.Message);
}
finally
{
conn.Close();
}
}
}
2条答案
按热度按时间koaltpgm1#
解决方案http://www.orafaq.com/forum/mv/msg/27794/296419/#msg_296419您应该定义UDT:MDSYS.SDO_几何图形:
和MDSYS.SDO点类型:
c2e8gylq2#
Oracle现在也可以使用他们的托管驱动程序了。我已经做了一个名为ManagedNetSdoGeometry的NetSdoGeometry实现的修改版本。您可以在这里找到它,
https://github.com/flappah/ManagedNetSdoGeometry