程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> 使用C#操作OracleSpatial的SDO_GEOMETRY對像(讀取和寫入)--方法2

使用C#操作OracleSpatial的SDO_GEOMETRY對像(讀取和寫入)--方法2

編輯:Oracle教程

如果不借助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();


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved