手机
当前位置:查字典教程网 >编程开发 >mssql数据库 >SQL2005CLR函数扩展-解析天气服务的实现
SQL2005CLR函数扩展-解析天气服务的实现
摘要:我们可以用CLR获取网络服务来显示到数据库自定函数的结果集中,比如163的天气预报http://news.163.com/xml/weath...

我们可以用CLR获取网络服务 来显示到数据库自定函数的结果集中,比如163的天气预报

http://news.163.com/xml/weather.xml

他的这个xml结果的日期是不正确的,但这个我们暂不讨论。

从这个xml获取天气的CLR代码如下,用WebClient访问一下就可以了。然后通过Dom对象遍历节点属性返回给结果集。

--------------------------------------------------------------------------------

复制代码 代码如下:

using System;

using System.Data;

using System.Data.SqlClient;

using System.Data.SqlTypes;

using System.Collections;

using System.Collections.Generic;

using Microsoft.SqlServer.Server;

public partial class UserDefinedFunctions

{

[SqlFunction (TableDefinition = "city nvarchar(100),date nvarchar(100),general nvarchar(100),temperature nvarchar(100),wind nvarchar(100)" , Name = "GetWeather" , FillRowMethodName = "FillRow" )]

public static IEnumerable GetWeather()

{

System.Collections.Generic.List <Item > list = GetData();

return list;

}

public static void FillRow(Object obj, out SqlString city, out SqlString date, out SqlString general, out SqlString temperature, out SqlString wind)

{

Item data = (Item )obj;

city = data.city;

date = data.date;

general = data.general;

temperature = data.temperature;

wind = data.wind;

}

class Item

{

public string city;

public string date;

public string general;

public string temperature;

public string wind;

}

static System.Collections.Generic.List <Item > GetData()

{

System.Collections.Generic.List <Item > ret = new List <Item >();

//try

//{

string url = "http://news.163.com/xml/weather.xml" ;

System.Net.WebClient wb = new System.Net.WebClient ();

byte [] b = wb.DownloadData(url);

string data = System.Text.Encoding .Default.GetString(b);

System.Xml.XmlDocument doc = new System.Xml.XmlDocument ();

doc.LoadXml(data);

foreach (System.Xml.XmlNode node in doc.ChildNodes[1])

{

string city = GetXMLAttrib(node, "name" );

foreach (System.Xml.XmlNode subnode in node.ChildNodes)

{

Item item = new Item ();

item.city = city;

item.date = GetXMLAttrib(subnode, "date" );

item.general = GetXMLAttrib(subnode, "general" );

item.temperature = GetXMLAttrib(subnode, "temperature" );

item.wind = GetXMLAttrib(subnode, "wind" );

ret.Add(item);

}

}

//}

//catch(Exception ex)

//{

// SqlContext.Pipe.Send(ex.Message);

//}

return ret;

}

static string GetXMLAttrib(System.Xml.XmlNode node, string attrib)

{

try

{

return node.Attributes[attrib].Value;

}

catch

{

return string .Empty;

}

}

};

--------------------------------------------------------------------------------

部署这个clr函数的脚本如下

--------------------------------------------------------------------------------

复制代码 代码如下:

drop function dbo. xfn_GetWeather

drop ASSEMBLY TestWeather

go

CREATE ASSEMBLY TestWeather FROM 'd:/sqlclr/TestWeather.dll' WITH PERMISSION_SET = UnSAFE;

--

go

CREATE FUNCTION dbo. xfn_GetWeather ()

RETURNS table ( city nvarchar ( 100), date nvarchar ( 100), general nvarchar ( 100), temperature nvarchar ( 100), wind nvarchar ( 100))

AS EXTERNAL NAME TestWeather. UserDefinedFunctions. GetWeather

--------------------------------------------------------------------------------

测试函数

--------------------------------------------------------------------------------

select * from dbo. xfn_GetWeather ()

SQL2005CLR函数扩展-解析天气服务的实现1

【SQL2005CLR函数扩展-解析天气服务的实现】相关文章:

SQL2005 大数据量检索的分页

SQL server 2008 数据库优化常用脚本

SQL Server 2008 安装和配置图解教程(附官方下载地址)

SQLServer CONVERT 函数测试结果

SQL Server 2005 数据维护实务

详解SQLServer 2008 R2数据库SSAS建模及扩展能力

SQL Server 2008安装图解(详细)

SQL server 2008 数据安全(备份和恢复数据库)

SQL2005 性能监视器计数器错误解决方法

SQL删除重复数据只保留一条

精品推荐
分类导航