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. 串口log

    使用windows自带的超级终端: 可从开机log开始保存: -----

  2. git add 之后因为没提交正确文件需要撤销

    之后因为没提交正确文件需要撤销时,采用如下方法:git log //查看提交记录MT6592_L_2SIM_GIT$ git reset --hard 717af7c9664be098939cb266 ...

  3. Java中的public、protected、default和private的区别

    (1)       对于public修饰符,它具有最大的访问权限,可以访问任何一个在CLASSPATH下的类.接口.异常等.它往往用于对外的情况,也就是对象或类对外的一种接口的形式. (2)      ...

  4. 寄售Consignment和VMI有什么区别?

    Consignment 寄存一般是指卖方把货物存放在买方所属仓库,消耗后结帐.库存水平控制和货物的物理管理都由买方负责.这是目前很多大卖场通行的做法.典型的VMI一般也是指卖方把货物存放在买方附近的仓 ...

  5. leetcode:Summary Ranges

    Given a sorted integer array without duplicates, return the summary of its ranges. For example, give ...

  6. ArrayAdapter参数的不同运用

    ArrayAdapter参数不同带来的效果不同 String[] array = {"a","b","c","d",&q ...

  7. 【转】PWM占空比和分辨率

    占空比是接通时间与周期之比冲量相等而形状不同的窄脉冲加在具有惯性的环节上时,其效果基本相同占空比:就是输出的PWM中,高电平保持的时间与该PWM的时钟周期的时间之比,如一个PWM的频率是1000Hz, ...

  8. Jquery源码中的Javascript基础知识(二)

    接上一篇,jquery源码的这种写法叫做匿名函数自执行 (function( window, undefined ) { // code })( window ); 函数定义了两个参数window和u ...

  9. github每次推送都要输入用户名和密码

    /***************************************************************************** * github每次推送都要输入用户名和密 ...

  10. Java 图片转换为字符图 CharMaps (整理)

      /* * Java 图片转换成字符图 CharMaps (整理) * * 2016-1-2 深圳 南山平山村 曾剑锋 * * @(#)CharMaps.java 2014/1/16 * 1.这个一 ...