使用C#操作Oracle Spatial的SDO_GEOMETRY对像(读取和写入)
首先,这个需要使用ODAC,也就是Oracle.DataAccess.dll,新出的托管Oracle.ManagedDataAccess.dll不支持Object Type,无法使用
ODAC使用方法参考:http://blog.csdn.net/rrrrssss00/article/details/7178515
http://pan.baidu.com/s/1dDquLhv
或
http://www.kuaipan.cn/file/id_22823997376823621.htm
大致思路是:
- [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();
转载于:https://www.cnblogs.com/telwanggs/p/5252888.html
使用C#操作Oracle Spatial的SDO_GEOMETRY对像(读取和写入)相关推荐
- Oracle Spatial中SDO_Geometry说明
Oracle Spatial中SDO_Geometry说明 在ArcGIS中通过SDE存储空间数据到Oracle中有多种存储方式,分别有:二进制Long Raw .ESRI的ST_Geometry以及 ...
- Oracle Spatial中SDO_Geometry详细说明
转自:https://blog.csdn.net/u010865734/article/details/74526451 在ArcGIS中通过SDE存储空间数据到Oracle中有多种存储方式,分别有: ...
- OCCI读写Oracle Spatial的SDO_Geometry
1.使用Oracle OTT工具生成对应的C++类. 1.1设置ORACLE_HOME:服务器端安装目录. 设置客户端安装目录,提示什么java错误. 暂时不管了. 1.2写一个intype文件tes ...
- java将clob类型文件写到磁盘_Java对Oracle中Clob类型数据的读取和写入
Java对Oracle中Clob数据类型是不能够直接插入的,但是可以通过流的形式对clob类型数据写入或者读取,网上代码并不算特别多,讲的 Java对Oracle中Clob数据类型是不能够直接插入的, ...
- clob在java里的类型_Java对Oracle中Clob类型数据的读取和写入(转)
Java对Oracle中Clob数据类型是不能够直接插入的,但是可以通过流的形式对clob类型数据写入或者读取,网上代码并不算特别多,讲的也不是很清楚,我对网上资料进行了整理和总结,具体看代码: 写入 ...
- Oracle Spatial的空间查询,代码操作
oracle的sdo_geometry中内置get_wkt和get_wkb两个方法. 以数据库表geoms为例,此表中有id和geometry两列 try { OracleConnection con ...
- oracle spatial java 类库,[ Oracle Spatial 系列 ] 之一 SDO_Geometry详细说明(ZZ)
在ArcGIS中通过SDE存储空间数据到Oracle中有多种存储方式,分别有:二进制Long Raw .ESRI的ST_Geometry以及基于Oracle Spatial的SDO_Geometry等 ...
- Oracle Spatial 空间分析之缓冲区分析
缓冲区分析需要主要使用Oracle Spatial 空间分析操作函数,下面会对其各个参数进行详细讲解,资料有来源于网上与书上. 使用Oracle Spatial 空间分析操作函数--SDO_WITHI ...
- C语言(APL指令)对mysql数据库的操作-----连接、读取、写入、修改、删除(保姆级讲解)
目录 前言: C语言操作mysql前的准备工作 1.C语言连接mysql数据库 函数介绍 (1)mysql_ini() 函数 (2)mysql_library_init()函数 (3)mysql_re ...
最新文章
- ZOJ 3820 Building Fire Stations
- Atitit.java c#这类编程语言的设计失败点attilax总结
- 一个 .git 目录,领悟 Git 的强大!
- DockerONE 干货 深入理解Docker容器和镜像
- 算法的时间复杂度和空间复杂度的原理
- 分析 tuning-primer.sh 源码
- java 笔记(3) —— 动态代理,静态代理,cglib代理
- github和git的简单使用
- python常用的十进制、16进制、字符串、字节串之间的转换
- cad用计算机怎么计算坐标,CAD如何快速计算出图纸中任意点的坐标值
- vue 使用代理(proxyTable)报错500
- Java进阶诀窍httpwww.china-pub.com44147
- linux不能打开流的函数为,详解 4 种电脑提示“无法访问函数不正确”的解决方法...
- 【论文整理1】On the Continuity of Rotation Representations in Neural Networks
- python 验证码字符分割
- 基于HarmonyOS的华为智能手表APP开发实战——Fitness
- English Words(For Computer Science)
- codeforce#420 E. Okabe and El Psy Kongroo(图论+矩阵快速幂)
- 三层网络靶场搭建MSF内网渗透
- 使用HTML制作课表
热门文章
- ibm软件工程师含金量_【上海IBM工资】软件开发工程师待遇-看准网
- (38)FPGA三种基本逻辑门(或门)
- (45)System Verilog 类中变量随机激励约束语法
- FPGA RAM时分复用减少逻辑资源
- python 字典处理_Python 6 个字典操作你必须知道
- centos安装apache_实战Linux部署Apache
- STM32F103串口收发
- 6阶群的非平凡子群_离散数学复习笔记
- 网络协议栈深入分析(一)--与sk_buff有关的几个重要的数据结构
- Linux netfilter源码分析(4)