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. 加密解密(6)RSA算法过程图解

    转自: http://blog.csdn.net/21aspnet/article/details/7249401 RSA算法 RSA公钥加密算法是1977年由Ron Rivest.Adi Shami ...

  2. [LightOJ1004]Monkey Banana Problem(dp)

    题目链接:http://lightoj.com/login_main.php?url=volume_showproblem.php?problem=1004 题意:数塔的变形,上面一个下面一个,看清楚 ...

  3. 上下左右布局(DIV+CSS)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. c#调用系统资源大集合-3

    public static void 打开控制面板多媒体属性音频() { Process.Start("rundll32.exe", " shell32.dll,Cont ...

  5. laravel named route

    laravel中一般对于路由的使用方法是在routes.php中定义一个路由,在view中如果要引用一个url则直接通过<a href="url/">来使用. 但是随着 ...

  6. Debian字符模式下修改显示分辨率

    Debian字符模式下修改显示分辨率 一.准备工具 a) Git apt-get install git 二.获取屏幕修改辅助软件 a) 创建临时文件 mkdir /tmp/screenModify ...

  7. UVa 11988 (数组模拟链表) Broken Keyboard (a.k.a. Beiju Text)

    题意: 模拟一个文本编辑器,可以输入字母数字下划线,如果遇到'['则认为是Home键,如果是']'则认作End键. 问最终屏幕上显示的结果是什么字符串. 分析: 如果在数组用大量的移动字符必然很耗时. ...

  8. BZOJ 3754 Tree之最小方差树

    枚举平均数. mdzz编译器. #include<iostream> #include<cstdio> #include<cstring> #include< ...

  9. Vim+Ctags+Taglist组合:

    Ctags 1,sudo apt-get install Ctags //会提示最新版本的名字:Exuberant Ctags 2,在源码的最上层目录执行:ctags -R //会在当前目录先生成一个 ...

  10. 理解 Bias 与 Variance 之间的权衡

    有监督学习中,预测误差的来源主要有两部分,分别为 bias  与 variance,模型的性能取决于 bias 与 variance 的 tradeoff ,理解 bias 与 variance 有助 ...