2009-05-19 9 views
2

これは、ASP.NET 3.5にシンジケートフィードを作成するScott Mitchellの素晴らしい記事のようです。私の問題は、現在のところは鋭くないC#とLinqを使用していることです。SqlConnectionとVB.NETを使用したASP.NET Syndicationフィードの作成

http://dotnetslackers.com/articles/aspnet/How-to-create-a-syndication-feed-for-your-website.aspx

の例では、VB.NETのSQLConnectionオブジェクトを使用して、この記事のようなシンジケートフィードを生成することができますSystem.ServiceModel.Syndication名前空間のために存在する可能性がある場所を誰でも知っていますか?

私はすべての例をC#とLinqで作成しているようです(おそらく後ではなくすぐにそれらを学ぶ必要があると思われます)。

答えて

7

はおそらく、今ではそれを考え出したが、ここでは完全といくつかのVBの愛(とNecromancer badgeための試みのための実装だきました:)

aspxページはシンプルで、60秒のキャッシュに注意してください。:

<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="Default.aspx.vb" Inherits="YourProject._Default" %> 
<%@ OutputCache Duration="60" VaryByParam="Type" %> 

代わりにHttpHandlerを使用することを検討したいと思いますが、これはうまくいくでしょう。

背後にあるコード:

Imports System.ServiceModel.Syndication 
Imports System.Xml 

Partial Public Class _Default 
    Inherits System.Web.UI.Page 

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    Dim dbConn As String = "[your db connection]" 
    Dim format As FeedFormats = GetFeedFormat() 
    Dim posts As New List(Of SyndicationItem) 

    Using cnn As New SqlClient.SqlConnection(dbConn) 
     cnn.Open() 

     Using cmd As New SqlClient.SqlCommand("SELECT ID, Title, Text, Url, Created FROM Posts", cnn) 
     Dim reader As SqlClient.SqlDataReader = cmd.ExecuteReader 

     While reader.Read 
      Dim item As New SyndicationItem(reader.Item("Title"), reader("Text"), New Uri(reader("Url"))) 

      posts.Add(item) 
     End While 
     End Using 
    End Using 

    Dim feed As New SyndicationFeed("Your feed title", "Your feed description", New Uri("http://yourdomain.com"), posts) 

    Using feedWriter As XmlWriter = XmlWriter.Create(Response.OutputStream) 
     Select Case format 
     Case FeedFormats.Atom 
      Response.ContentType = "application/rss+xml" 

      Dim atomFormatter As New Atom10FeedFormatter(feed) 
      atomFormatter.WriteTo(feedWriter) 
     Case FeedFormats.Rss 
      Response.ContentType = "application/atom+xml" 

      Dim rssFormatter As New Rss20FeedFormatter(feed) 
      rssFormatter.WriteTo(feedWriter) 
     End Select 
    End Using 
    End Sub 

    Private Function GetFeedFormat() As FeedFormats 
    If Request.QueryString("format") = "atom" Then 
     Return FeedFormats.Atom 
    Else 
     Return FeedFormats.Rss 
    End If 
    End Function 

    Public Enum FeedFormats 
    Rss = 1 
    Atom = 2 
    End Enum 
End Class 

最後に、超完全性について、テーブルを作成するためのSQLスクリプト:

CREATE TABLE [dbo].[Posts](
[ID] [int] IDENTITY(1,1) NOT NULL, 
[Title] [nvarchar](50) NOT NULL, 
[Text] [ntext] NOT NULL, 
[Url] [nvarchar](50) NOT NULL, 
[Created] [datetime2](7) NOT NULL, 
CONSTRAINT [PK_Posts] PRIMARY KEY CLUSTERED 
(
[ID] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] 

GO 

ALTER TABLE [dbo].[Posts] ADD CONSTRAINT [DF_Posts_Url] DEFAULT ('') FOR [Url] 
GO 

ALTER TABLE [dbo].[Posts] ADD CONSTRAINT [DF_Posts_Created] DEFAULT (getdate()) FOR [Created] 
GO 

が完了。 VB.NET、SQL接続、System.ServiceModel.Syndication名前空間、およびLINQなし。 :)

更新日:11-11-2010にNecromancerバッジを取得しました。わーい!ありがとう! :)

0

VB.Netでこれらのオブジェクトを使用している例はわかりませんが、VB.Netに変換するにはいくつかの方法があります。あなたSharpDevelopのようなIDEを使用することができます、あなたはいくつかの無料のオンラインコンバータのいずれかを使用することができます。

私のお気に入りのテクニックは、ソースをVisual Studioにダウンロードまたは切り取り、貼り付けてC#でプロジェクトをコンパイルすることです。次に、Reflectorを使用してILをVB.Netに逆アセンブルします。これを行うことで、C#をVB.Netと比較することができます。類似点を確認し、C#をより迅速に選択することができます。

+0

実際に、私はそれを翻訳者を見つけることによって遠くに得ました。 Linqのコードですが、今は楽しい時間を翻訳していません。 – wrburgess

+0

MicrosoftのVisual LINQ Query Builderアドインを試しましたか? http://code.msdn.microsoft.com/vlinq古いAccess Query Builderに似た素晴らしいツールです。 –

+0

まあ、率直に言って、私はこのプロジェクトにLINQを使用したくありません。私は今、少なくともSQLデータレイヤーに固執しようとしています。 – wrburgess

関連する問題