我們可以用CLR獲取網絡服務 來顯示到數據庫自定函數的結果集中比如的天氣預報
他的這個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(
)
date nvarchar(
)
general nvarchar(
)
temperature nvarchar(
)
wind nvarchar(
)"
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 = "
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[
])
{
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 (
)
date nvarchar (
)
general nvarchar (
)
temperature nvarchar (
)
wind nvarchar (
))
AS EXTERNAL NAME TestWeather
UserDefinedFunctions
GetWeather
測試函數
select * from dbo xfn_GetWeather ()
From:http://tw.wingwit.com/Article/program/MySQL/201311/29543.html