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