使用C#操作Oracle Spatial的SDO_GEOMETRY对像(读取和写入)
首先,这个需要使用ODAC,也就是Oracle.DataAccess.dll,新出的托管Oracle.ManagedDataAccess.dll不支持Object Type,无法使用
ODAC使用方法参考:http://blog.csdn.net/rrrrssss00/article/details/7178515
- [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);
- }
- }
- OracleCommand cmd = new OracleCommand()
- cmd.Connection = con;
- cmd.CommandType = CommandType.Text;
- cmd.CommandText = " select id,geo from geoinfo ";
- using (OracleDataReader readerGeoInfo = cmd.ExecuteReader())
- {
- while (readerGeoInfo.Read())
- {
- GeoInfo geoInfo = new GeoInfo();
- if (!readerGeoInfo.IsDBNull(0))
- {
- geoInfo.Id = readerGeoInfo.GetDecimal(0);
- }
- if (!readerGeoInfo.IsDBNull(1))
- {
- geoInfo.Geo = (SdoGeometry)readerGeoInfo.GetValue(1);
- }
- geoInfoList.Add(geoInfo);
- }
- readerGeoInfo.Close();
- }
- cmd.CommandText = " insert into geoinfo values (geoinfo_seq.nextval,:param) ";
- cmd.Parameters.Clear();
- OracleParameter oracleParameterGeo = new OracleParameter();
- oracleParameterGeo.OracleDbType = OracleDbType.Object;
- oracleParameterGeo.UdtTypeName = "MDSYS.SDO_GEOMETRY";
- cmd.Parameters.Add(oracleParameterGeo);
- //creating point
- SdoGeometry geoPoint = new SdoGeometry();
- geoPoint.Sdo_Gtype = 2001;
- geoPoint.Point = new SdoPoint();
- geoPoint.Point.X = 200;
- geoPoint.Point.Y = 400;
- oracleParameterGeo.Value = geoPoint;
- //insert point in table geoinfo
- cmd.ExecuteNonQuery();
- //creating polygon
- SdoGeometry geoPolygon = new SdoGeometry();
- geoPolygon.Sdo_Gtype = 2003;
- geoPolygon.ElemArray = new decimal[] { 1, 1003, 1 };
- geoPolygon.OrdinatesArray = new decimal[] { 3, 3, 3, 10, 10, 10, 10, 3, 3, 3 };
- oracleParameterGeo.Value = geoPolygon;
- //insert polygon into table geoinfo
- cmd.ExecuteNonQuery();
使用C#操作Oracle Spatial的SDO_GEOMETRY对像(读取和写入)的更多相关文章
- C#读取Oracle Spatial的sdo_geometry
oracle的sdo_geometry中内置get_wkt和get_wkb两个方法. 以数据库表geoms为例,此表中有id和geometry两列 try { OracleConnection con ...
- Oracle Spatial中SDO_Geometry详细说明[转]
在ArcGIS中通过SDE存储空间数据到Oracle中有多种存储方式,分别有:二进制Long Raw .ESRI的ST_Geometry以及基于Oracle Spatial的SDO_Geometry等 ...
- Oracle Spatial中SDO_Geometry说明
Oracle Spatial中SDO_Geometry说明 在ArcGIS中通过SDE存储空间数据到Oracle中有多种存储方式,分别有:二进制Long Raw .ESRI的ST_Geometry以及 ...
- 【转载】Oracle Spatial中SDO_Geometry详细说明
转载只供个人学习参考,查看请前往原出处:http://www.cnblogs.com/upDOoGIS/archive/2009/05/20/1469871.html 相关微博:oracle 创建SD ...
- Oracle Spatial操作geometry方法
Oracle Spatial中SDO_GEOMETRY类型: CREATE TYPE SDO_GEOMETRY AS OBJECT( SDO_GTYPE NUMBER,--几何类型,如点线面 SDO_ ...
- Oracle Spatial GIS相关研究
1.Oracle Spatial 概念相关 Oracle Spatial 是Oracle 数据库强大的核心特性,包含了用于存储矢量数据类型.栅格数据类型和持续拓扑数据类型的原生数据类型.Oracle ...
- Oracle spatial与arcsde 的关系
有一些同事问过我下面这些问题: 我们用了oracle spatial sdo_geometry,是不是没用arcsde? 我们到底是使用oracle spatial还是arcsde,有点懵! 执行了c ...
- shp转oracle spatial
2010年12月1日 终于搞定了shp到oracle spatial,说下步骤和感受吧! 1 XP系统:转换工具的下载(shp2sdo.exe ):下载后把此文件复制到PATH变量包含的目录下(E: ...
- Oracle spatial抽稀函数(SDO_UTIL.SIMPLIFY)
在使用Oracle spatial做空间查询和展示时,经常会遇到展示或者查询过慢,这时候我可以通过空间数据抽稀来优化查询展示效率. 在Oracle spatial中的抽稀函数为:SDO_UTIL.SI ...
随机推荐
- DEV控件ASPxTextBox设置ClientEnabled="false"之后出现的问题
DEV控件ASPxTextBox设置ClientEnabled="false"之后,js中设置文本框的值后,按钮后台点击事件中获取文本框的值为空.
- SQL Server提取字段中的所有数字
今天公司项目中遇到了一个需求,要求提取用户电话号码字段中的所有电话信息. 由于该字段在项目最初设计中没有严格控制数据质量,导致用户在输入时包含了很多非电话的信息,如用户名字等(136 **** *** ...
- Implementation:Binary Indexed Tree 树状数组
#include <iostream> #include <cstdlib> using namespace std; class BinaryIndexedTree { pr ...
- mysqli 查询
$mysqli = new mysqli('localhost', 'user', 'pwd', 'dbname'); $query = "select goods_id,goods_nam ...
- ASP.NET SignalR-B.S/C.S 相互打通DEMO
ASP .NET SignalR 是一个ASP .NET 下的类库,可以在ASP .NET 的Web项目中实现实时通信. 什么是实时通信的Web呢?就是让客户端(Web页面)和服务器端可以互相通知 ...
- iis配置asp.net常见问题解决方案
很多朋友在用IIS6架网站的时候遇到不少问题,而这些问题有些在过去的IIS5里面就遇到过,有些是新出来的,俺忙活了一下午,做 了很多次试验,结合以前的排错经验,做出了这个总结,希望能给大家帮上忙:) ...
- intent调用代码总结
进入联系人界面 Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); intent.setData(People.CO ...
- Attack Top Chunk之 bcloud
前言 这是 bctf 2016 的题,链接 https://github.com/ctfs/write-ups-2016/tree/master/bctf-2016/exploit/bcloud-20 ...
- lodop 代码注释
LODOP.SET_PRINT_PAGESIZE(1,1000,1500,""); /*1,纵向输出;1000,宽度;1500,高度*:单位为0.1毫米/LODOP.ADD_PR ...
- ORACLE查询表最近更改的数据 VERSIONS BETWEEN TIMESTAMP MINVALUE AND MAXVALUE
转自 http://blog.chinaunix.net/uid-8504518-id-3325718.html 今天开发人员问我如何快速并方便的查出一张表最近被更改的记录,这个需求很简单,由于是查最 ...