使用C#操作Oracle Spatial的SDO_GEOMETRY对像(读取和写入)--方法2

2023-10-17 17:38

本文主要是介绍使用C#操作Oracle Spatial的SDO_GEOMETRY对像(读取和写入)--方法2,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

如果不借助ODAC的自定义数据类型,那么也可以使用Oracle Spatial的几个内置SQL函数来实现SDO_Geometry对象的操作

这种方法需要在数据库端对所有数据进行一次转换(不管是在select 还是insert时),有些情况下会对性能和执行时间有比较大的影响,需要注意


***.get_wkb() :***为SDO_Geometry列的列名,该函数可将SDO_Geometry对象转为wkb二进制,读取和写入时即可按照Blob类型(C#中对应byte[])来读取和写入,示例见下文
***.get_wkt():*** 为SDO_Geometry列的列名,该函数可将SDO_Geometry对象转为wkt文本,读取和写入时即可按照Clob类型 (C#中对应string) 来读取和写入,示例见下文
注: wkt(OGC well-known text)和wkb(OGC well-known binary)是OGC制定的空间数据的组织规范,wkt是以文本形式描述,wkb是以二进制形式描述。参考http://blog.sina.com.cn/s/blog_00ccd2400101c2x8.html

sdo_geometry(wkb,srid)sdo_geometry(wkt,srid):sdo_geometry构造函数,可以通过传入一个blob格式 的wkb对象或clob格式的wkt对象,以及一个srid,生成数据库中的sdo_geometry对象,srid可以通过 select ***.srid from 语句查询得到

示例1:按wkb格式查询 geoinfo 表中只有两列,id列为number类型,geo列为SDO_GEOMTRY类型)
OracleCommand cmd = new OracleCommand(@"SELECT geo.get_wkb()  FROM geoinfo WHERE id= '12' ", con);       
con.Open();           
byte[] wkb = (byte[])cmd.ExecuteScalar();

示例2:按wkt格式查询
OracleCommand cmd = new OracleCommand(@"SELECT geo.get_wkt()  FROM geoinfo WHERE id= '12' ", con);       
con.Open();           
string wkt = (string)cmd.ExecuteScalar();

示例3:按wkb插入
OracleCommand cmdGeom = new OracleCommand(@"insert into geoinfo values (13,sdo_geometry(:geom,31297))", con);                //31297为srid,实际使用时应替换成自己的srid
OracleParameter p1 = new OracleParameter(":geom",OracleDbType.Blob);
p1.Value = wkb;                                //wkb为byte[]
cmdGeom.Parameters.Add(p1);             con.Open();
int i = cmdGeom.ExecuteNonQuery();
con.Close();

示例4:按wkt插入
OracleCommand cmdGeom = new OracleCommand(@"insert into geoinfo values (13,sdo_geometry(:geom,31297))", con);
OracleParameter p1 = new OracleParameter(":geom",OracleDbType.Clob);
p1.Value = wkt;                                //wkt为string
cmdGeom.Parameters.Add(p1);             con.Open();
int i = cmdGeom.ExecuteNonQuery();
con.Close();


这篇关于使用C#操作Oracle Spatial的SDO_GEOMETRY对像(读取和写入)--方法2的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/226930

相关文章

C++ Sort函数使用场景分析

《C++Sort函数使用场景分析》sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变,如果某些场景需要保持相同元素间的相对顺序,可使... 目录C++ Sort函数详解一、sort函数调用的两种方式二、sort函数使用场景三、sort函数排序

Redis实现延迟任务的三种方法详解

《Redis实现延迟任务的三种方法详解》延迟任务(DelayedTask)是指在未来的某个时间点,执行相应的任务,本文为大家整理了三种常见的实现方法,感兴趣的小伙伴可以参考一下... 目录1.前言2.Redis如何实现延迟任务3.代码实现3.1. 过期键通知事件实现3.2. 使用ZSet实现延迟任务3.3

idea maven编译报错Java heap space的解决方法

《ideamaven编译报错Javaheapspace的解决方法》这篇文章主要为大家详细介绍了ideamaven编译报错Javaheapspace的相关解决方法,文中的示例代码讲解详细,感兴趣的... 目录1.增加 Maven 编译的堆内存2. 增加 IntelliJ IDEA 的堆内存3. 优化 Mave

Java String字符串的常用使用方法

《JavaString字符串的常用使用方法》String是JDK提供的一个类,是引用类型,并不是基本的数据类型,String用于字符串操作,在之前学习c语言的时候,对于一些字符串,会初始化字符数组表... 目录一、什么是String二、如何定义一个String1. 用双引号定义2. 通过构造函数定义三、St

Pydantic中Optional 和Union类型的使用

《Pydantic中Optional和Union类型的使用》本文主要介绍了Pydantic中Optional和Union类型的使用,这两者在处理可选字段和多类型字段时尤为重要,文中通过示例代码介绍的... 目录简介Optional 类型Union 类型Optional 和 Union 的组合总结简介Pyd

Vue3使用router,params传参为空问题

《Vue3使用router,params传参为空问题》:本文主要介绍Vue3使用router,params传参为空问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录vue3使用China编程router,params传参为空1.使用query方式传参2.使用 Histo

使用Python自建轻量级的HTTP调试工具

《使用Python自建轻量级的HTTP调试工具》这篇文章主要为大家详细介绍了如何使用Python自建一个轻量级的HTTP调试工具,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下... 目录一、为什么需要自建工具二、核心功能设计三、技术选型四、分步实现五、进阶优化技巧六、使用示例七、性能对比八、扩展方向建

Spring Security方法级安全控制@PreAuthorize注解的灵活运用小结

《SpringSecurity方法级安全控制@PreAuthorize注解的灵活运用小结》本文将带着大家讲解@PreAuthorize注解的核心原理、SpEL表达式机制,并通过的示例代码演示如... 目录1. 前言2. @PreAuthorize 注解简介3. @PreAuthorize 核心原理解析拦截与

一文详解JavaScript中的fetch方法

《一文详解JavaScript中的fetch方法》fetch函数是一个用于在JavaScript中执行HTTP请求的现代API,它提供了一种更简洁、更强大的方式来处理网络请求,:本文主要介绍Jav... 目录前言什么是 fetch 方法基本语法简单的 GET 请求示例代码解释发送 POST 请求示例代码解释

Feign Client超时时间设置不生效的解决方法

《FeignClient超时时间设置不生效的解决方法》这篇文章主要为大家详细介绍了FeignClient超时时间设置不生效的原因与解决方法,具有一定的的参考价值,希望对大家有一定的帮助... 在使用Feign Client时,可以通过两种方式来设置超时时间:1.针对整个Feign Client设置超时时间