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. leetcode:Rotate Array

    Rotate an array of n elements to the right by k steps. For example, with n = 7 and k = 3, the array  ...

  2. 聚合函数字段注意.where和having的区别

    当使用聚合函数时,出现在select中的字段要么出现在聚合函数里,要么出现在group by 子句里.像下面这句是错误的: 1 SELECT  detno,AVG(sal),job FROM  emp ...

  3. JavaScript判断浏览器类型及版本

    JavaScript是前端开发的主要语言,我们可以通过编写JavaScript程序来判断浏览器的类型及版本.JavaScript判断浏览器类型一般有两种办法,一种是根据各种浏览器独有的属性来分辨,另一 ...

  4. HTML的列表标签

    一.上下层列表标签:<dl>..</dl>: 上层dt 下层dd:封装的内容会被自动缩进的效果 <dl> <dt>运动户外</dt> < ...

  5. Qt之QHeaderView排序

    简述 在Windows中我们经常会遇到表头排序,比如可以对文件按照名称.修改日期.类型.大小进行排序,方便我们统一的归类查找. Qt中,我们可以通过点击表头来对QTableView或QTreeView ...

  6. Codeforces Round #276 (Div. 2)

    A. Factory 题意:给出a,m,第一天的总量为a,需要生产为a%m,第二天的总量为a+a%m,需要生产(a+a%m)%m 计算到哪一天a%m==0为止 自己做的时候,把i开到1000来循环就过 ...

  7. Linux/Android 性能优化工具 perf

    /***************************************************************************** * Linux/Android 性能优化工 ...

  8. PDO防注入原理分析以及使用PDO的注意事项 (转)

    我们都知道,只要合理正确使用PDO,可以基本上防止SQL注入的产生,本文主要回答以下两个问题: 为什么要使用PDO而不是mysql_connect? 为何PDO能防注入? 使用PDO防注入的时候应该特 ...

  9. 09day2

    多米诺骨牌 递推+高精度 [问题描述] Jzabc 对多米诺骨牌有很大兴趣,然而他的骨牌比较特别,只有黑色的和白色的两种.他觉得如果存在连续三个骨牌是同一种颜色,那么这个骨牌排列便是不美观的.现在他有 ...

  10. HDU2102 A计划

    解题思路:一道简单题,却WA了十几发,犯几个低级错误.还是不能急躁,     内心要平静,具体分析见代码: #include<iostream> #include<cstdio> ...