如果不借助ODAC的自定义数据类型,那么也可以使用Oracle Spatial的几个内置SQL函数来实现SDO_Geometry对象的操作
这种方法需要在数据库端对所有数据进行一次转换(不管是在select 还是insert时),有些情况下会对性能和执行时间有比较大的影响,需要注意
OracleCommand cmd = new OracleCommand(@"SELECT geo.get_wkb() FROM geoinfo WHERE id= ‘12‘ ", con); con.Open(); byte[] wkb = (byte[])cmd.ExecuteScalar();
OracleCommand cmd = new OracleCommand(@"SELECT geo.get_wkt() FROM geoinfo WHERE id= ‘12‘ ", con); con.Open(); string wkt = (string)cmd.ExecuteScalar();
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();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,布布扣,bubuko.com
使用C#操作Oracle Spatial的SDO_GEOMETRY对像(读取和写入)--方法2
原文:http://blog.csdn.net/rrrrssss00/article/details/22915253