Having the Result Set of a Stored Proc Sent to You by RSS Feed.

by JBrooks   14. 十二月 2010 12:44

I wanted to monitor one of my system from my desk top and from my phone.  I found a simple solution whereby I can subscribe to the result set of a stored proc by using RSS. So I can have this feed MS Outlook, my phone or my web browser.

First, Visual Studio 2010 makes creating an RSS feed a simple matter that is about 1 page of code.

I simply add an ASPX page to my project and remove most of the markup so it only has 2 lines:

 

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="rss.aspx.cs"  Inherits="RSS.rss"  %>

 

<%@ OutputCache Duration="60" VaryByParam="none" %>

Next the code behind simply calls the stored proc placing the results into a table and then loading up some of the RSS related collections VS2010 gives you.

 

using System;

using System.Data;

using System.ServiceModel.Syndication;

using System.Web;

using System.Collections.Generic;

using System.Xml;

 

namespace RSS

{

public partial class rss : System.Web.UI.Page

{

    protected void Page_Load(object sender, EventArgs e)

    {

 

        string id = Request.QueryString["id"];

 

        // I don't want just anyone to subscribe, so you have to know the GUID.

        if (id== null || id != "23F14EA1-1B20-443B-9B94-92C4EA4A8099")

            throw new Exception("Guid not reconized");

 

 

        Response.ContentType = "application/atom+xml";

 

        // this gets the data from the database and populates a table.

        DataTable dt = cDB.getFeed();

        SyndicationFeed myFeed = new SyndicationFeed();

 

        myFeed.Title = TextSyndicationContent.CreatePlaintextContent("SampleApp Activity");

        myFeed.Description = TextSyndicationContent

            .CreatePlaintextContent(@"A syndication of the most recently 

                    SampleApp activity including exceptions.");

        myFeed.Links.Add(SyndicationLink.CreateAlternateLink(

            new Uri(GetFullyQualifiedUrl("/rss.aspx"))));

        myFeed.Links.Add(SyndicationLink.CreateSelfLink(

            new Uri(GetFullyQualifiedUrl(Request.RawUrl))));

        myFeed.Copyright = TextSyndicationContent

                        .CreatePlaintextContent("Copyright SampleApp");

        myFeed.Language = "en-us";

 

 

        List<SyndicationItem> feedItems = new List<SyndicationItem>();

        foreach (DataRow dr in dt.Rows)

        {

 

            SyndicationItem item = new SyndicationItem();

            item.Title = TextSyndicationContent.CreatePlaintextContent(dr["title"].ToString());

            SyndicationPerson authInfo = new SyndicationPerson();

            authInfo.Email = "SampleApp@YourDomain.com";

 

            item.Authors.Add(authInfo);

            // RSS feeds can only have one author.

 

            // The stored proc returns different categories of data that I am interested in.

            switch (dr["category"].ToString())

            {

                case "WindFarms":

                case "WindFarms ":

                    item.Links.Add(SyndicationLink.CreateAlternateLink(

                        new Uri(GetFullyQualifiedUrl("/WindFarms.aspx"))));

                    authInfo.Name = "SampleApp WindFarm";

                    break;

 

                case "Exceptions":

                    item.Links.Add(SyndicationLink.CreateAlternateLink(

                        new Uri(GetFullyQualifiedUrl("/ErrorLog.aspx"))));

                    authInfo.Name = "SampleApp Exception";

                    break;

 

                default:

                    authInfo.Name = "SampleApp";

                    break;

 

            }

            item.Summary = TextSyndicationContent.CreatePlaintextContent(

                dr["summary"].ToString());

 

            item.Categories.Add(new SyndicationCategory(dr["category"].ToString()));

            item.PublishDate = DateTime.Parse(dr["pubdate"].ToString());

            item.LastUpdatedTime = item.PublishDate;

            item.Id = item.PublishDate.ToString();

 

            // Add the item to the feed

            feedItems.Add(item);

        }

 

 

        myFeed.Items = feedItems;

 

 

        XmlWriter feedWriter = XmlWriter.Create(Response.OutputStream);

 

        // Use Atom 1.0 

        Atom10FeedFormatter atomFormatter = new Atom10FeedFormatter(myFeed);

        atomFormatter.WriteTo(feedWriter);

 

        feedWriter.Close();

 

    }

 

    private string GetFullyQualifiedUrl(string s)

    {

        Uri u = new Uri(HttpContext.Current.Request.Url, s);

        return u.ToString();

 

    }

 

}

}

To have this feed my Outlook RSS folder I just need to right click “RSS Feeds” and select “Add a New RSS Feed…”.

Then enter the URL of my RSS feed.   Don’t forget to add the GUID at the end with     ?id=23F14EA1-1B20-443B-9B94-92C4EA4A8099

If you site uses authentication in your site you will have to turn it off for the rss.aspx page.  To do this you would add an entry in your web config file:

 

<location path="rss.aspx">

    <system.web>

        <authorization>

            <allow users="*"/>

        </authorization>

    </system.web>

</location>

You should now have a folder in Outlook that will get populated by the feed.

Having the Result Set of a Stored Proc Sent to You by RSS Feed.的更多相关文章

  1. MySQL5.7: Paging using Mysql Stored Proc

    -- 查询外键 涂聚文 (Geovin Du) select concat(table_name, '.', column_name) as 'foreign key', concat(referen ...

  2. Creating a SharePoint BCS .NET Connectivity Assembly to Crawl RSS Data in Visual Studio 2010

    from:http://blog.tallan.com/2012/07/18/creating-a-sharepoint-bcs-net-assembly-connector-to-crawl-rss ...

  3. [转]How to get return values and output values from a stored procedure with EF Core?

    本文转自:https://stackoverflow.com/questions/43935345/how-to-get-return-values-and-output-values-from-a- ...

  4. [转]SSIS Execute SQL Task : Mapping Parameters And Result Sets

    本文转自:http://www.programmersedge.com/post/2013/03/05/ssis-execute-sql-task-mapping-parameters-and-res ...

  5. Support for multiple result sets

    https://blueprints.launchpad.net/myconnpy/+spec/sp-multi-resultsets Calling a stored procedure can p ...

  6. Using Stored Programs with MySQLdb

    http://flylib.com/books/en/1.142.1.125/1/ Using Stored Programs with MySQLdb The techniques for call ...

  7. [转]Entity Framework Sprocs with Multiple Result Sets

    本文转自:https://msdn.microsoft.com/en-us/data/jj691402.aspx Entity Framework Sprocs with Multiple Resul ...

  8. Mini ORM——PetaPoco笔记

    Mini ORM--PetaPoco笔记 记录一下petapoco官网博客的一些要点.这些博客记录了PetaPoco是如何一步步改进的. 目录: Announcing PetaPoco PetaPoc ...

  9. Mini ORM——PetaPoco笔记(转)

    记录一下petapoco官网博客的一些要点.这些博客记录了PetaPoco是如何一步步改进的. 目录: Announcing PetaPoco PetaPoco-Improvements PetaPo ...

随机推荐

  1. eclipse ADT下载地址

    adt not vpn https://dl.google.com/android/eclipse/ 或 https://dl-ssl.google.com/android/eclipse/ andr ...

  2. Android开源库--SlidingMenu左右侧滑菜单

    如果说我比别人看得更远些,那是因为我站在了巨人的肩上.   github地址:https://github.com/jfeinstein10/SlidingMenu   设置: 1.下载之后以依赖项的 ...

  3. Sencha CMD 4- 安装与首次使用

    哥英文不好,网上搜索好多中文教程都是抄来抄去没有完整的介绍.所以写出来让与我一样的小伙伴惊呆下! 这篇主要是安装,后续慢慢更新 一.Sencha CMD是干啥滴!? 它是服务使用EXTJS SDK开发 ...

  4. 支持向量机之Hinge Loss 解释

    Hinge Loss 解释 SVM 求解使通过建立二次规划原始问题,引入拉格朗日乘子法,然后转换成对偶的形式去求解,这是一种理论非常充实的解法.这里换一种角度来思考,在机器学习领域,一般的做法是经验风 ...

  5. MIMO-OFDM通信系统学习笔记(一)

    [笔记一:单载波传输与多载波传输] MIMO-OFDM技术是3G-LTE,WiMAX通信系 统,以及WLan比如IEEE802.11a,IEEE802.11n等标准的关键技术,作为一枚通信狗,这些应该 ...

  6. Java核心技术II读书笔记(一)

    Char2 XML 解析器:读入一个文件,确认其具有正确的格式,然后将其分解成各种元素,使程序员能够访问这些元素. java库提供了两种XML解析器:DOM和SAX,即文档对象模型和流机制解析器. D ...

  7. RequireJS入门(三)转

    这篇来写一个具有依赖的事件模块event.event提供三个方法bind.unbind.trigger来管理DOM元素事件. event依赖于cache模块,cache模块类似于jQuery的$.da ...

  8. xcode的ios工程目录结构

    目录结构: a.supporting files: main.m和资源文件 xxx-info.plist:包含应用程序相关属性列表,如版本,程序名等 .pch文件:预编译头文件,相当于MFC里的std ...

  9. DataTable反向模糊匹配查找语法

    正向写法: string filter = "code like '%"+sheetname+"%'"; filter值为: code like '%表F.3_ ...

  10. [Everyday Mathematics]20150225

    设 $f:\bbR\to\bbR$ 二次可微, 适合 $f(0)=0$. 试证: $$\bex \exists\ \xi\in\sex{-\frac{\pi}{2},\frac{\pi}{2}},\s ...