2009-05-19 8 views
2

Dies scheint ein großartiger Artikel von Scott Mitchell zum Erstellen von syndizierten Feeds in ASP.NET 3.5. Das Problem für mich ist, dass es C# und Linq verwendet, auf die ich zur aktuellen Zeit nicht scharf bin.Erstellen Sie ASP.NET Syndication Feeds mit SqlConnection und VB.NET

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

Weiß jemand, wo ein Beispiel könnte für den System.ServiceModel.Syndication Namespace existieren, die eine syndizierte Feed mögen diesen Artikel produzieren kann VB.NET und ein SQLConnection--Objekt?

Ich habe mich umgesehen und jedes Beispiel scheint in C# und Linq produziert zu werden (was wahrscheinlich ein Beweis für meine Notwendigkeit ist, sie bald zu lernen, anstatt später).

Antwort

7

Sie haben gedacht, es wahrscheinlich schon, aber hier ist eine Implementierung auf Vollständigkeit und einige VB Liebe (und ein Versuch, für die Necromancer badge :)

Die aspx Seite einfach ist, die 60 Sekunden Cache beachten.:

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

Sie möchten wahrscheinlich einen HttpHandler stattdessen verwenden, aber das wird auch gut funktionieren.

Der Code hinter:

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 

schließlich für Super-Vollständigkeit, der SQL-Skript der Tabelle für die Erstellung von:

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 

Fertig. VB.NET, eine SQL-Verbindung, der Namespace System.ServiceModel.Syndication und kein LINQ. :)

Update: Habe am 11-11-2010 das Nekromanten-Abzeichen bekommen. Yay! Vielen Dank! :)

0

Ich kenne kein Beispiel mit diesen Objekten in VB.Net, aber es gibt mehrere Möglichkeiten, C# -Code in VB.Net umzuwandeln. Sie könnten eine IDE wie SharpDevelop verwenden, Sie könnten einen von mehreren kostenlosen Online-Konvertern verwenden.

Meine Lieblingstechnik wäre das Herunterladen oder Ausschneiden und Einfügen der Quelle in Visual Studio und das Kompilieren des Projekts in C#. Verwenden Sie dann Reflector, um die IL zu VB.Net zu zerlegen. Auf diese Weise können Sie das C# mit VB.Net vergleichen und es kann Ihnen helfen, die Ähnlichkeiten zu erkennen und C# schneller aufzusuchen, wenn Sie das möchten.

+0

Eigentlich habe ich bis jetzt einen Übersetzer gefunden. Es ist der Linq-Code, über den ich jetzt keine gute Zeit habe. – wrburgess

+0

Haben Sie das Visual LINQ Query Builder-Add-In von Microsoft ausprobiert? http://code.msdn.microsoft.com/vlinq Es ist ein nettes Tool, das dem alten Access Query Builder ähnlich ist. –

+0

Nun, ehrlich gesagt möchte ich LINQ für dieses Projekt nicht verwenden. Ich versuche, zumindest jetzt mit dem SQL Data Layer zu bleiben. – wrburgess

Verwandte Themen