`
holoblog
  • 浏览: 1260816 次
博客专栏
E0fcf0b7-6756-3051-9a54-90b4324c9940
SQL Server 20...
浏览量:19500
文章分类
社区版块
存档分类
最新评论

SQL Servr 2008空间数据应用系列六:基于SQLCRL的空间数据可编程性

 
阅读更多

友情提示,您阅读本篇博文的先决条件如下:

  1、本文示例基于Microsoft SQL Server 2008 R2调测。

  2、具备 Transact-SQL 编程经验和使用 SQL Server Management Studio 的经验。

  3、具有使用 Microsoft Visual Studio 进行 Microsoft .NET Framework开发的经验。

  4、熟悉或了解Microsoft SQL Server 2008中的空间数据类型。

  5、具备相应(比如OGC)的GIS专业理论知识。


  Microsoft .NET应用通常都是宿主在操作系统平台的.NET Framework之上,如果想在SQL Server 2008中使用.NET进行托管代码,SQL Server 2008将运行一个属于自己的.NET Framewrok平台运行环境(SQLOS),SQLOS和.NET CLR将共享数据库引擎进程空间,因此基于SQL Server 2008的CLR也被称为的SQLCLR基于SQL Server 2008的核心组件SQLCRL提供了友好的的可编程性支持,SQL Server数据库引擎将使用由CLR提供的功能无缝地提供了多种功能其中包括使用空间数据类型goegraphygoemetry的数据的可编程性支持。

一、SQLCLR & .NET CLR互编程性

  可以在SQL Server 2008的安装目录下找到SQLCLR与.NET CLR共享的空间数据类型共享库组件(Microsoft.SqlServer.Types.dll),该组件除了支持基于SQL Server 2008的空间数据类型数据库编程,同时也支持基于.NET Framework的面向对象编程,包括对VB.NET、C#的多语言的支持,该组件位于如下安装目录中:  关于空间对象的属性、函数的具体使用这里就不做介绍了,详细请查阅:几何实例上的OGC方法

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->C:/ProgramFiles/MicrosoftSQLServer/100/SDK/Assemblies/Microsoft.SqlServer.Types.dll

  通过下面这个示例程序可以演示基于Microsoft.SqlServer.Types.dll在SQLCLR和.NET CLR之间的双向互支持性。

SQLCLR:定义一个地理坐标点
declare@geomgeometry;
set@geom=geometry::Point(107.04352,28.870554,4326);
select@geom;
-----------------------------------------------------------------------------------
.NETCLR:定义一个地理坐标点
staticvoidMain(string[]args)
{
varpoint
=SqlGeometry.Point(107.04352,28.870554,4326);

Console.WriteLine(point.STX);
Console.WriteLine(point.STY);
Console.WriteLine(point.ToString());
}

  在.NET CLR中可以使用所有SQLCLR编程中所提供的编程接口,也就是说在.NET CLR中变成不仅仅只是局限于再空间对象的定义上,还包括对象的相关属性、方法的支持,如下代码块演示了SQLCLR和.NET CLR编程实现地理测距函数的对比。

declare@geomgeometry;
set@geom=geometry::Point(107.04352,28.870554,4326);

declare@endgeometry;
set@end=geometry::Point(103.84041,29.170240,4326);
select@geom.STDistance(@end);
------------------------------------------------------------------------
varpointStart
=SqlGeometry.Point(107.04352,28.870554,4326);
varpointEnd
=SqlGeometry.Point(103.84041,29.170240,4326);
varresult
=pointStart.STDistance(pointEnd);
Console.WriteLine(
"地理距离:"+result+"(米)");

二、创建空间对象到数据库

  Microsoft.SqlServer.Types.dll提供友好的.NET CLR编程性,同样我们可以将在.NET CLR中创建的对象插入到空间数据库中进行查询,以便于做空间分析、计算。下面演示通过.NET CLR构造一个多边形空间对象并插入到SQL Server 2008数据库中。

staticvoidMain(string[]args)
{
//定义一个多边形
varpolygon=SqlGeography.STGeomFromText(
newSqlChars(
newSqlString("POLYGON((-114.0161132812542.0003251483162,-114.038085937542.0003251483162,"
+"-113.99414062537.0200982013681,-109.0502929687537.0200982013681,-109.0942382812541.0130657870063,"
+"-111.0717773437541.0462168145206,-111.0717773437542.0003251483162,-114.0161132812542.0003251483162))",
111)),
4326);

varsql
="insertCities(CityName,CityLocation)values('test','"+polygon.ToString()+"')";

InsertToDB(sql);
}

privatestaticvoidInsertToDB(stringsql)
{
using(varconn=newSqlConnection(ConfigurationManager.AppSettings["SQL2008"]))
{
if(conn.State==ConnectionState.Closed)conn.Open();
using(varcmd=newSqlCommand(sql,conn))
{
introw=cmd.ExecuteNonQuery();
}
}
}

三、查询数据库空间数据

  首先来看看基于SQL Server Management Studio 查询刚刚入库的记录,通过空间结果可以直接预览查询结果。

declare@citygeometry;
select@city=CityLocationfromCitieswhereID=5;
select@city;
select@city.STArea() as 面积;--求面积
---------------------------------------------------------------------------------------------------------------------------------------
0x000000000104080000000000000008815CC035B18AA70A0045400000000070825CC035B18AA70A00454000000000A07F5CC0CECAEE93928242400000000038435BC0CECAEE93928242400000000008465BC0BCF1C323AC8144400000000098C45BC01572BD6EEA8544400000000098C45BC035B18AA70A0045400000000008

(1行受影响)

面积
----------------------
22.6802255629445

(1行受影响)

        

  同样可以使用.NET CLR对其进行编程实现,这其实和查询普通数据是没有区别的,只是将查询结果转为为的是空间数据类型。可以通过如下代码实现查询空间数据到应用程序中。

staticvoidMain(string[]args)
{
varsql
="selectCityLocationfromCitieswhereID=5";
varresult
=QueryDB(sql);

varpolygon
=SqlGeography.STGeomFromText(
newSqlChars(
newSqlString(result)),4326);

Console.WriteLine(polygon.ToString());
}

privatestaticstringQueryDB(stringsql)
{
using(varconn=newSqlConnection(ConfigurationManager.AppSettings["SQL2008"]))
{
if(conn.State==ConnectionState.Closed)conn.Open();
using(varcmd=newSqlCommand(sql,conn))
{
returncmd.ExecuteScalar().ToString();
}
}
}

  本篇就大概介绍到这里,经常内容请关注后续系列博文,下一篇将介绍微软Bing Maps与空间数据的亲密接触,敬请期待~~~~

四、相关资料

  [1]、数据表中使用空间数据类型:http://www.cnblogs.com/beniao/archive/2011/02/21/1959347.html

  [2]、几何实例上的OGC方法:http://msdn.microsoft.com/zh-cn/visualc/bb933960.aspx

  [3]、几何图形实例上的扩展方法:http://msdn.microsoft.com/zh-cn/library/bb933880.aspx

  [4]、OGC 静态几何图形方法:http://msdn.microsoft.com/zh-cn/library/bb933894.aspx

分享到:
评论

相关推荐

    sqlservr32和sqlservr64.zip

    标题中的"sqlservr32和sqlservr64.zip"指的是SQL Server 2005服务中的两个关键组件,`sqlservr32.exe`和`sqlservr64.exe`。这两个文件是SQL Server服务的核心执行文件,分别对应于32位和64位操作系统。在Windows 8和...

    SQLServr2019空间数据库应用系列12页.pdf

    SQL Server 2019 提供了全面性的空间支持,允许组织通过具空间功能的应用程序来无缝地取用、使用及扩展以位置为基础的数据,最后可协助用户做出更好的决策。空间分析是一项非常复杂的工作,包含一系列学术内容:地理...

    sqlservr64.rar

    sqlservr64.rar sqlservr32.rar 3、进入SQL Server 2005的安装路径,进入MSSQL文件夹下面的Binn文件夹,在该文件夹里面搜索“sqlservr.exe”文件,并把它复制一份 【实例截图】 【核心代码】 sqlservr64 ├── sql...

    sqlservr32位与64位

    5、安装完成之后,如果想要打SP4补丁,去任务管理器找到sqlservr.exe进程,把它结束掉,把备份的sqlservr.exe文件还原回去,也就是替换回去(否则SP4安装程序以为你已经应用过SP4),然后就能打上SP4补丁了(即安装...

    sqlservr.exe和sqlos.dll

    5、安拆完成之后,往任务挨点器找到sqlservr.exe进程,把它竣事掉,把备份的sqlservr.exe文件借原归往,也就是交流归往(否则SP4安拆轨范觉得你已应用过SP4),然后即速挨上SP4补钉(即安拆已下载好的SP4更新轨范)...

    sqlservr64.zip

    64位版本的SQL Server 2005能够利用更强大的计算资源,处理更大的数据量,适用于需要高性能和高并发性的应用场景。 在安装过程中遇到错误是很常见的,尤其是对于复杂的软件系统如SQL Server。这可能由于多种原因,...

    sqlservr.exe和sqlos.dll win8-win10下安装sqlserver2005 亲测成功

    这个可执行文件是数据库引擎的核心,处理来自客户端的查询,并管理数据存储、事务处理、安全性等核心功能。在安装过程中,`sqlservr.exe`会根据配置文件设置启动,确保数据库实例能够正确运行。 `sqlos.dll`(SQL ...

    sqlservr.exe和sqlos.dll win8-win10下安装sqlserver2005

    5、安拆完成之后,往任务挨点器找到sqlservr.exe进程,把它竣事掉,把备份的sqlservr.exe文件借原归往,也就是交流归往(否则SP4安拆轨范觉得你已应用过SP4),然后即速挨上SP4补钉(即安拆已下载好的S P4更新轨范...

    sqlservr.exe和sqlos.dll-WIN10版本-win10安装sql2005失败替换文件

    用友T3安装sql2005失败替换文件sqlservr.exe和sqlos.dll win10安装sqlserver时安装提示出错,需要再安装过程中替换文件, 安装过程中,当提示服务启动失败时,不要关闭此安装页面,找到~:\Program Files\Microsoft ...

    sqlservr替换.rar

    在win10中 安装SQL2005 安装到中途会无法继续进行下去, 需要选替换二个文件 找到 \Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Binn(一般路径在C盘),将sqlos.dll与sqlservr.exe(这个就是需要替换的文件...

    sqlservr.exe和sqlos.dll 64和32位

    安装到SqlServer服务的时候提示启动服务失败,这里就是关键啦,下载本文的两个附件,里面是SP4(2005.90.5000.0)版本的sqlservr.exe和sqlos.dll。32位下载sqlservr32.rar,64位下载sqlservr64.rar。

    sqlservr64-win10安装2005替换文件.rar

    需要再安装过程中替换文件, 安装过程中,当提示服务启动失败时,不要关闭此安装页面,找到~:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Binn(一般路径在C盘),将sqlos.dll与sqlservr.exe(这个就是需要...

    sqlservr+sqlos.zip

    安装sqlserver2005时候,安装完成后,提示启动失败。 再次有教程,一步步按照教程操作,才能正常成功。 注:win10系统安装sqlserver2005时候,检测IIS总是过不去。原因:win10 IIS没有完全,注意是全部,完全安装...

    sqlservr64.rar sqlservr32.rar

    2、下载本文的附件,sqlservr64.rar sqlservr32.rar 3、将下载的文件解压出sqlservr.exe和sqlos.dll两个文件,复制到Binn文件夹里面覆盖原文件(即点击替换)。 例如“C:\Program Files\MicrosoftSQLServer\MSSQL.2...

    sqlservr64两文件.rar

    某些情况下,是不好用的,我就是其一,不过也许别人有用呢,放上来,1分来取吧 看着别人几十分的要,我下来了,但不好用,听说有些人是好用的,1分扔出来了

    sqlservr执行命令

    在SQL Server中,`sqlservr`是数据库引擎的主要可执行文件,它是SQL Server服务的核心组件,负责处理SQL语句、管理数据存储以及提供与其他应用程序的接口。在本篇文章中,我们将深入探讨如何使用`sqlservr`命令来...

    win8 64位安装sql 2005无法启动sql server服务问题

    5、安装完成之后,如果想要打SP4补丁,去任务管理器找到sqlservr.exe进程,把它结束掉,把备份的sqlservr.exe文件还原回去,也就是替换回去(否则SP4安装程序以为你已经应用过SP4),然后就能打上SP4补丁了(即安装...

    sqlos.dll和sqlservr.exe win10安装sql server 2005 报错。

    win10安装SQL server 2005 报错 我是win10家庭版升级的专业版,费了好大劲才安装成功。 安装方法全部在附件里的教程中。附带安装包和补丁包的下载链接及必须的两个文件。 建议下载后先看一遍教程再动手安装。

    sqlos及sqlservr.zip

    在win10中 安装SQL2005 安装到中途会无法继续进行下去, 需要选替换二个文件 找到 \Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Binn(一般路径在C盘),将sqlos.dll与sqlservr.exe(这个就是需要替换的文件...

Global site tag (gtag.js) - Google Analytics