访问Oracle Spatial中的SDO_GEOMETRY字段的方法(windows下)
2012-06-27 11:00
387 查看
访问Oracle Spatial中的SDO_GEOMETRY字段的方法(windows下)
引用url:
http://iihero.iteye.com/blog/995152
博客分类: Oracle
OracleWindowsSQL.netJDBC
1.使用oci或者occi,在安装oracle后可以在oraclehome\md\demo\examples目录下参考其C++实现,
该方法效率最高,但实现比较复杂;
2.使用Oracle提供的OO4O,是com,在vb6代码如下:
'***************************************************************
'Gisc Lab, Nanjing Normal University
'
'Purpose: This Demo Shows how to read spatial data from Oracle
'
'Input: User ID='Scott', Password='Tiger', Data Source='Apollo',
' SQL='select * from interstates where rownum<2'
'
'Output: xmlDocument or xmlReader
'
'Author: Charlie Chen
'
'Data: 7-28-2004
'***************************************************************
Dim OraSession As OraSessionClass
Dim OraDatabase As OraDatabase
Dim interstates As OraDynaset
Dim geom As OraObject
Dim coords As OraCollection
Private Sub Command1_Click()
Set OraSession = New OraSessionClass
Set OraDatabase = OraSession.OpenDatabase("apollo", "scott/tiger", 0&)
Set interstates = OraDatabase.CreateDynaset("select * from interstates where rownum<2", 0&)
Set geom = interstates.Fields("GEOM").Value
Set coords = geom.SDO_ORDINATES
For i = 1 To coords.Size
Debug.Print coords.Item(i)
Next i
End Sub
程序可读性和维护性较好,需要添加对oip9.tlb的引用
3.使用ODP.NET(Oracle公司提供的在.net平台上的数据访问组件),在.NET环境下可以直接转换为xml坐标字符串,但效率太低;
4.使用JDBC或者SDO API,无论从哪方面来讲都比较理想。
补充.net平台上的实现,代码如下:
private XmlDocument GetSpatialData(string connectionString, string SQL)
{
OracleConnection con = new OracleConnection(connectionString);
try
{
con.Open();
OracleCommand cmd = new OracleCommand(SQL, con);
cmd.XmlCommandType = OracleXmlCommandType.Query;
cmd.BindByName = true;
int rows = cmd.ExecuteNonQuery();
XmlReader xmlReader = cmd.ExecuteXmlReader();
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.PreserveWhitespace = true;
xmlDocument.Load(xmlReader);
return xmlDocument;
}
catch(Exception e)
{
throw e;
}
finally
{
if (con.State == System.Data.ConnectionState.Open) con.Close();
con.Dispose();
}
}
调用:
string constr = "User Id=scott;Password=tiger;Data Source=apollo";
string sql = "select * from interstates where rownum<2";
XmlDocument xmlDocument = GetSpatialData(constr, sql);
Console.WriteLine((xmlDocument != null) ? xmlDocument.InnerXml : "fail to read");
---the---end;
引用url:
http://iihero.iteye.com/blog/995152
博客分类: Oracle
OracleWindowsSQL.netJDBC
1.使用oci或者occi,在安装oracle后可以在oraclehome\md\demo\examples目录下参考其C++实现,
该方法效率最高,但实现比较复杂;
2.使用Oracle提供的OO4O,是com,在vb6代码如下:
'***************************************************************
'Gisc Lab, Nanjing Normal University
'
'Purpose: This Demo Shows how to read spatial data from Oracle
'
'Input: User ID='Scott', Password='Tiger', Data Source='Apollo',
' SQL='select * from interstates where rownum<2'
'
'Output: xmlDocument or xmlReader
'
'Author: Charlie Chen
'
'Data: 7-28-2004
'***************************************************************
Dim OraSession As OraSessionClass
Dim OraDatabase As OraDatabase
Dim interstates As OraDynaset
Dim geom As OraObject
Dim coords As OraCollection
Private Sub Command1_Click()
Set OraSession = New OraSessionClass
Set OraDatabase = OraSession.OpenDatabase("apollo", "scott/tiger", 0&)
Set interstates = OraDatabase.CreateDynaset("select * from interstates where rownum<2", 0&)
Set geom = interstates.Fields("GEOM").Value
Set coords = geom.SDO_ORDINATES
For i = 1 To coords.Size
Debug.Print coords.Item(i)
Next i
End Sub
程序可读性和维护性较好,需要添加对oip9.tlb的引用
3.使用ODP.NET(Oracle公司提供的在.net平台上的数据访问组件),在.NET环境下可以直接转换为xml坐标字符串,但效率太低;
4.使用JDBC或者SDO API,无论从哪方面来讲都比较理想。
补充.net平台上的实现,代码如下:
private XmlDocument GetSpatialData(string connectionString, string SQL)
{
OracleConnection con = new OracleConnection(connectionString);
try
{
con.Open();
OracleCommand cmd = new OracleCommand(SQL, con);
cmd.XmlCommandType = OracleXmlCommandType.Query;
cmd.BindByName = true;
int rows = cmd.ExecuteNonQuery();
XmlReader xmlReader = cmd.ExecuteXmlReader();
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.PreserveWhitespace = true;
xmlDocument.Load(xmlReader);
return xmlDocument;
}
catch(Exception e)
{
throw e;
}
finally
{
if (con.State == System.Data.ConnectionState.Open) con.Close();
con.Dispose();
}
}
调用:
string constr = "User Id=scott;Password=tiger;Data Source=apollo";
string sql = "select * from interstates where rownum<2";
XmlDocument xmlDocument = GetSpatialData(constr, sql);
Console.WriteLine((xmlDocument != null) ? xmlDocument.InnerXml : "fail to read");
---the---end;
相关文章推荐
- 访问Oracle Spatial中的SDO_GEOMETRY字段的方法(windows下)
- 访问Oracle Spatial中的SDO_GEOMETRY字段的方法(windows下)
- 访问Oracle Spatial中的SDO_GEOMETRY字段的方法(windows下)
- 关于Oracle Spatial 的字段SDO_GEOMETRY
- 使用C#操作Oracle Spatial的SDO_GEOMETRY对像(读取和写入)--方法2
- Windows平台内核级文件访问方法-------fdcwq(转自CN黑客联盟)
- 清除本机在Windows下访问共享文件夹时的登录信息的一种方法
- windows远程访问树莓派方法(+树莓派启动方法)
- 运行于Windows内建账户下的服务访问映射网络驱动器的方法
- windows 系统直接访问linux系统 的便捷方法
- linux访问windows共享文件夹的两种方法
- Oracle Spatial中SDO_Geometry详细说明[转]
- CentOS访问Windows共享文件夹的两种方法
- C#中,当声明类、方法、字段、属性等时,访问权限的说明。
- Linux下访问Windows的方法(原)
- Android 中利用反射访问private修饰的字段和方法
- CentOS访问Windows共享文件夹的两种方法 .
- Windows访问Linux下的共享目录的配置方法(share安全级别)
- linux虚拟机访问本机Windows共享文件设置方法
- Oracle DBLink 访问Lob 字段 ORA-22992 解决方法