首页数据库SQL2005CLR函数扩展-解析天气服务的实现

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

时间2024-02-29 00:40:05发布访客分类数据库浏览688
导读:收集整理的这篇文章主要介绍了SQL2005CLR函数扩展-解析天气服务的实现,觉得挺不错的,现在分享给大家,也给大家做个参考。 我们可以用CLR获取网络服务 来显示到数据库自定函数的结果...
收集整理的这篇文章主要介绍了SQL2005CLR函数扩展-解析天气服务的实现,觉得挺不错的,现在分享给大家,也给大家做个参考。 我们可以用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 ()
@H_232_126@

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: SQL2005CLR函数扩展-解析天气服务的实现
本文地址: https://pptw.com/jishu/632157.html
无法在com+ 目录中安装和配置程序集 错误:-2146233087的解决方法[已测] 同时安装vs2005团队开发版和sql 2005企业版的方法(downmoon原作)

游客 回复需填写必要信息