<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Ado.Net</title>
        <link>http://www.onteorasoftware.com/category/2.aspx</link>
        <description>Ado.Net</description>
        <language>en-US</language>
        <copyright>Ken Tucker</copyright>
        <generator>Subtext Version 2.1.2.2</generator>
        <item>
            <title>Sync Services Part 1</title>
            <link>http://blog.onteorasoftware.net/archive/2008/01/27/sync-services-part-1.aspx</link>
            <description>&lt;p&gt;
In this post we will create a local cache of the Northwind database.  To start with lets create a new visual basic windows forms project in Visual Studio 2008.  From the project menu select add a new item and select a new local database cache and name it northwind. 
&lt;/p&gt;
&lt;p&gt;
 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="/image.axd?picture=WindowsLiveWriter/SyncServicesPart1_11DDC/image_2.png"&gt;&lt;img style="border: 0px" src="/image.axd?picture=WindowsLiveWriter/SyncServicesPart1_11DDC/image_thumb.png" border="0" alt="image" width="446" height="322" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
 
&lt;/p&gt;
&lt;p&gt;
In the server connect select a connection to the northwind database. 
&lt;/p&gt;
&lt;p&gt;
 
&lt;/p&gt;
&lt;p&gt;
Press the add button and select the product table.  Press OK to close the dialog.  Go ahead and create a table adapter for the product table.  The drag the products table on to the form from the data source window.  Add a button to the binding navigator and set its text to Sync and change the display style to Text. 
&lt;/p&gt;
&lt;p&gt;
 
&lt;/p&gt;
&lt;p&gt;
In the button you added to the toolbar add this code 
&lt;/p&gt;
&lt;p&gt;
 
&lt;/p&gt;
&lt;font size="2" /&gt;&lt;font size="2" color="#0000ff"&gt;Private&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;Sub&lt;/font&gt;&lt;font size="2"&gt; ToolStripButton1_Click(&lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;ByVal&lt;/font&gt;&lt;font size="2"&gt; sender &lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;As&lt;/font&gt;&lt;font size="2"&gt; System.Object, &lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;ByVal&lt;/font&gt;&lt;font size="2"&gt; e &lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;As&lt;/font&gt;&lt;font size="2"&gt; System.EventArgs) &lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;Handles&lt;/font&gt;&lt;font size="2"&gt; ToolStripButton1.Click&lt;/font&gt;&lt;font size="2"&gt; 
&lt;p&gt;
&lt;font size="2" color="#008000"&gt;       ' Update the database&lt;/font&gt; 
&lt;/p&gt;
&lt;/font&gt;&lt;font size="2" /&gt;&lt;font size="2" color="#0000ff"&gt;        Me&lt;/font&gt;&lt;font size="2"&gt;.ProductsBindingSource.EndEdit()&lt;/font&gt;&lt;font size="2"&gt; &lt;font size="2" color="#0000ff"&gt;        Me&lt;/font&gt;&lt;font size="2"&gt;.TableAdapterManager.UpdateAll(&lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;Me&lt;/font&gt;&lt;font size="2"&gt;.NorthwindDataSet) &lt;/font&gt;&lt;font size="2"&gt;
&lt;p&gt;
&lt;font size="2" color="#008000"&gt;        ' Call SyncAgent.Synchronize() to initiate the synchronization process.&lt;/font&gt; 
&lt;/p&gt;
&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;
&lt;p&gt;
&lt;font size="2" color="#008000"&gt;        ' Synchronization only updates the local database, not your project’s data source.&lt;/font&gt; 
&lt;/p&gt;
&lt;/font&gt;&lt;font size="2" /&gt;&lt;font size="2" color="#0000ff"&gt;        Dim&lt;/font&gt;&lt;font size="2"&gt; syncAgent &lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;As&lt;/font&gt;&lt;font size="2"&gt; ProductsSyncAgent = &lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;New&lt;/font&gt;&lt;font size="2"&gt; ProductsSyncAgent()&lt;/font&gt;&lt;font size="2"&gt; &lt;font size="2" color="#0000ff"&gt;        Dim&lt;/font&gt;&lt;font size="2"&gt; syncStats &lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;As&lt;/font&gt;&lt;font size="2"&gt; Microsoft.Synchronization.Data.SyncStatistics = syncAgent.Synchronize() &lt;/font&gt;&lt;font size="2"&gt;
&lt;p&gt;
&lt;font size="2" color="#008000"&gt;       ' Reload the data source from the local database&lt;/font&gt; 
&lt;/p&gt;
&lt;/font&gt;&lt;/font&gt;&lt;font size="2" /&gt;&lt;font size="2" color="#0000ff"&gt;        Me&lt;/font&gt;&lt;font size="2"&gt;.ProductsTableAdapter.Fill(&lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;Me&lt;/font&gt;&lt;font size="2"&gt;.NorthwindDataSet.Products)&lt;/font&gt;&lt;font size="2"&gt; 
&lt;p&gt;
&lt;font size="2" color="#0000ff"&gt;End&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;Sub&lt;/font&gt; 
&lt;/p&gt;
&lt;/font&gt;
&lt;p&gt;
Run the app and Open up the Sql Server Management Studio Express.  Make some changes in the Northwind database's Product table and Press the sync button.   
&lt;/p&gt;
&lt;p&gt;
 
&lt;/p&gt;
&lt;p&gt;
Notice the changes you made to the Products table show up in the datagridview.  The changes are also saved in the local sqlce database. 
&lt;/p&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fwww.onteorasoftware.net%2fpost%2fSync-Services-Part-1.aspx"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fwww.onteorasoftware.net%2fpost%2fSync-Services-Part-1.aspx" border="0" alt="kick it on DotNetKicks.com" width="164" height="30" /&gt;&lt;/a&gt;
&lt;img src="http://blog.onteorasoftware.net/aggbug/36.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ken Tucker</dc:creator>
            <guid>http://blog.onteorasoftware.net/archive/2008/01/27/sync-services-part-1.aspx</guid>
            <pubDate>Sun, 27 Jan 2008 10:39:25 GMT</pubDate>
            <wfw:comment>http://blog.onteorasoftware.net/comments/36.aspx</wfw:comment>
            <comments>http://blog.onteorasoftware.net/archive/2008/01/27/sync-services-part-1.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://blog.onteorasoftware.net/comments/commentRss/36.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Change the DataType of a Column</title>
            <link>http://blog.onteorasoftware.net/archive/2007/12/05/change-the-datatype-of-a-column.aspx</link>
            <description>&lt;h3 align="center"&gt;Change the DataType of a Column&lt;/h3&gt;
&lt;p&gt;
&lt;br /&gt;
Sometimes when you fill a DataTable the .Net framework does not get the data type right.  Unfortunately once you fill a data table you can not change the data type.  You can use the data adapters FillScheme method to setup the data table this will allow you to be to change the data type.  Then you can fill the datatable with the data of the right type. .&lt;br /&gt;
&lt;br /&gt;
VB Example&lt;br /&gt;
&lt;font size="2" /&gt;&lt;font size="2" color="#0000ff"&gt;Dim&lt;/font&gt;&lt;font size="2"&gt; conn &lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;As&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;New&lt;/font&gt;&lt;font size="2"&gt; SqlClient.SqlConnection(&lt;/font&gt;&lt;font size="2" color="#a31515"&gt;"Server = .\sqlexpress; Database = NorthWind; "&lt;/font&gt;&lt;font size="2"&gt; &amp;amp; _&lt;/font&gt;&lt;font size="2"&gt; 
&lt;p&gt;
&lt;font size="2" color="#a31515"&gt;"Integrated Security = sspi;"&lt;/font&gt;&lt;font size="2"&gt;)&lt;/font&gt;
&lt;/p&gt;
&lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;Dim&lt;/font&gt;&lt;font size="2"&gt; dt &lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;As&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;New&lt;/font&gt;&lt;font size="2"&gt; DataTable&lt;/font&gt;&lt;font size="2" /&gt;&lt;font size="2" color="#0000ff" /&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="2" color="#0000ff"&gt;Dim&lt;/font&gt;&lt;font size="2"&gt; da &lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;As&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;New&lt;/font&gt;&lt;font size="2"&gt; SqlClient.SqlDataAdapter(&lt;/font&gt;&lt;font size="2" color="#a31515"&gt;"Select * from [Order Details]"&lt;/font&gt;&lt;font size="2"&gt;, conn)&lt;/font&gt;&lt;font size="2"&gt; 
&lt;p&gt;
da.FillSchema(dt, SchemaType.Mapped)
&lt;/p&gt;
dt.Columns(&lt;/font&gt;&lt;font size="2" color="#a31515"&gt;"OrderID"&lt;/font&gt;&lt;font size="2"&gt;).DataType = &lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;GetType&lt;/font&gt;&lt;font size="2"&gt;(&lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;Integer&lt;/font&gt;&lt;font size="2"&gt;)&lt;/font&gt;&lt;font size="2"&gt; 
&lt;p&gt;
da.Fill(dt)
&lt;/p&gt;
&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
C# example&lt;br /&gt;
&lt;br /&gt;
            SqlConnection  conn = new SqlConnection(&lt;br /&gt;
                 @"Server = .\sqlexpress; Database = NorthWind;Integrated Security  = sspi;");&lt;br /&gt;
            DataTable dt = new DataTable();&lt;br /&gt;
            SqlDataAdapter da = new SqlDataAdapter("Select * from [Order Details]", conn);&lt;br /&gt;
            da.FillSchema(dt, SchemaType.Mapped);&lt;br /&gt;
            dt.Columns["OrderID"].DataType = typeof(int);&lt;br /&gt;
            da.Fill(dt);
&lt;/p&gt;
&lt;font size="2" color="#0000ff" /&gt;
&lt;img src="http://blog.onteorasoftware.net/aggbug/60.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ken Tucker</dc:creator>
            <guid>http://blog.onteorasoftware.net/archive/2007/12/05/change-the-datatype-of-a-column.aspx</guid>
            <pubDate>Wed, 05 Dec 2007 13:29:04 GMT</pubDate>
            <wfw:comment>http://blog.onteorasoftware.net/comments/60.aspx</wfw:comment>
            <comments>http://blog.onteorasoftware.net/archive/2007/12/05/change-the-datatype-of-a-column.aspx#feedback</comments>
            <wfw:commentRss>http://blog.onteorasoftware.net/comments/commentRss/60.aspx</wfw:commentRss>
        </item>
        <item>
            <title>TableAdapter: Use a transaction with an TableAdapter</title>
            <link>http://blog.onteorasoftware.net/archive/2007/09/16/tableadapter-use-a-transaction-with-an-tableadapter.aspx</link>
            <description>&lt;h3 align="center"&gt;TableAdapter: Use a transaction with an TableAdapter&lt;/h3&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;
The easiest way to use an transaction with a TableAdapter is to use an TransactionScope.  First create a TransActionScope, update the database and finally commit the transaction.  Note not all database type work with System.Transactions. Add a reference to System.Transaction for this example.  
&lt;/p&gt;
&lt;p&gt;
&lt;font size="2"&gt;        Using tc As New TransactionScope&lt;br /&gt;
            Try&lt;br /&gt;
                EmployeeTableAdapter.Update(PubsDataSet.employee)&lt;br /&gt;
                'complete the transaction if there were no errors&lt;br /&gt;
                tc.Complete()&lt;br /&gt;
            Catch&lt;br /&gt;
                'something went wrong let the transaction roll back&lt;br /&gt;
            End Try&lt;br /&gt;
        End Using&lt;br /&gt;
&lt;/font&gt;
&lt;/p&gt;
&lt;img src="http://blog.onteorasoftware.net/aggbug/77.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ken Tucker</dc:creator>
            <guid>http://blog.onteorasoftware.net/archive/2007/09/16/tableadapter-use-a-transaction-with-an-tableadapter.aspx</guid>
            <pubDate>Sun, 16 Sep 2007 19:28:44 GMT</pubDate>
            <wfw:comment>http://blog.onteorasoftware.net/comments/77.aspx</wfw:comment>
            <comments>http://blog.onteorasoftware.net/archive/2007/09/16/tableadapter-use-a-transaction-with-an-tableadapter.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://blog.onteorasoftware.net/comments/commentRss/77.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Inner Join with 2 or more tables</title>
            <link>http://blog.onteorasoftware.net/archive/2007/09/16/inner-join-with-2-or-more-tables.aspx</link>
            <description>&lt;h3 align="center"&gt;Inner Join with 2 or more tables&lt;/h3&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;
If you are getting data from more than 2 tables you need to surround the inner joins in brackets. For this example I am using the just released &lt;a href="http://www.microsoft.com/sql/editions/compact/default.mspx"&gt;SQL Compact Edition&lt;/a&gt;. You will find a sample NorthWind database in the sdk. Note to work with a SQL CE database you need to add a reference to the System.Data.Sqlce.dll you find in the directory you installed sql server ce. 
&lt;/p&gt;
&lt;p&gt;
&lt;br /&gt;
Imports System.Data.SqlServerCe &lt;br /&gt;
Imports System.Text&lt;br /&gt;
 &lt;br /&gt;
Public Class Form1
&lt;/p&gt;
&lt;p&gt;
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load&lt;br /&gt;
        Dim conn As New SqlCeConnection("data source='NorthWind.sdf'; mode=Exclusive;")&lt;br /&gt;
        Dim sbCommand As New StringBuilder&lt;br /&gt;
        Dim dt As New DataTable&lt;br /&gt;
        sbCommand.Append("Select Orders.[Customer ID], Products.[Product Name], [Order Details].Quantity, [Order Details].[Unit Price] From ")&lt;br /&gt;
        sbCommand.Append("(Orders Inner Join [Order Details] on Orders.[Order ID] = [Order Details].[Order ID]) ")&lt;br /&gt;
        sbCommand.Append("Inner Join Products on [Order Details].[Product ID]= Products.[Product ID]")
&lt;/p&gt;
&lt;p&gt;
        Dim da As New SqlCeDataAdapter(sbCommand.ToString, conn)&lt;br /&gt;
        da.Fill(dt)&lt;br /&gt;
        DataGridView1.DataSource = dt&lt;br /&gt;
        With DataGridView1.Columns("Unit Price").DefaultCellStyle&lt;br /&gt;
            .Format = "c"&lt;br /&gt;
            .Alignment = DataGridViewContentAlignment.MiddleRight&lt;br /&gt;
        End With&lt;br /&gt;
    End Sub&lt;br /&gt;
End Class
&lt;/p&gt;
&lt;p&gt;
 
&lt;/p&gt;
&lt;img src="http://blog.onteorasoftware.net/aggbug/85.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ken Tucker</dc:creator>
            <guid>http://blog.onteorasoftware.net/archive/2007/09/16/inner-join-with-2-or-more-tables.aspx</guid>
            <pubDate>Sun, 16 Sep 2007 19:23:37 GMT</pubDate>
            <wfw:comment>http://blog.onteorasoftware.net/comments/85.aspx</wfw:comment>
            <comments>http://blog.onteorasoftware.net/archive/2007/09/16/inner-join-with-2-or-more-tables.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://blog.onteorasoftware.net/comments/commentRss/85.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Unable to Update Database added to Project</title>
            <link>http://blog.onteorasoftware.net/archive/2007/09/16/unable-to-update-database-added-to-project.aspx</link>
            <description>&lt;h3 align="center"&gt;Unable to Update Database added to Project&lt;/h3&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;
I see from time to time people complaining they can not update an database they added to their Visual Studio 2005 project. Sometimes your database is actually getting updated but Visual Studio is copying the old version of the database over the updated version. You should check and make sure the Database's Copy to Output property is not set to Copy Always. It should be set to Copy if newer.
&lt;/p&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;img src="http://www.vb-tips.com/images/capture.png" alt="" width="204" height="655" /&gt; 
&lt;img src="http://blog.onteorasoftware.net/aggbug/84.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ken Tucker</dc:creator>
            <guid>http://blog.onteorasoftware.net/archive/2007/09/16/unable-to-update-database-added-to-project.aspx</guid>
            <pubDate>Sun, 16 Sep 2007 19:22:45 GMT</pubDate>
            <wfw:comment>http://blog.onteorasoftware.net/comments/84.aspx</wfw:comment>
            <comments>http://blog.onteorasoftware.net/archive/2007/09/16/unable-to-update-database-added-to-project.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://blog.onteorasoftware.net/comments/commentRss/84.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Find Duplicate Records in a Datatable</title>
            <link>http://blog.onteorasoftware.net/archive/2007/09/16/find-duplicate-records-in-a-datatable.aspx</link>
            <description>&lt;h3 align="center"&gt;Find Duplicate Records in a Datatable&lt;/h3&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;
I was asked how to find duplicate records in a datatable, I used a dataview to sort my records. I used the sorted list to check the next record for a duplicate record. The duplicate will be deleted. 
&lt;/p&gt;
&lt;p&gt;
&lt;br /&gt;
&lt;br /&gt;
Imports System.Security.Cryptography
&lt;/p&gt;
&lt;p&gt;
Public Class Form1&lt;br /&gt;
    Dim dt As New DataTable
&lt;/p&gt;
&lt;p&gt;
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load&lt;br /&gt;
        dt.Columns.Add("Name")&lt;br /&gt;
        dt.Columns.Add("Number", GetType(Integer))
&lt;/p&gt;
&lt;p&gt;
        For x As Integer = 0 To 200&lt;br /&gt;
            Select Case x Mod 3&lt;br /&gt;
                Case 0&lt;br /&gt;
                    dt.LoadDataRow(New Object() {"Ken", TrueRandom.Rand(100)}, True)&lt;br /&gt;
                Case 1&lt;br /&gt;
                    dt.LoadDataRow(New Object() {"Kelly", TrueRandom.Rand(100)}, True)&lt;br /&gt;
                Case 2&lt;br /&gt;
                    dt.LoadDataRow(New Object() {"Bill", TrueRandom.Rand(100)}, True)&lt;br /&gt;
            End Select&lt;br /&gt;
        Next
&lt;/p&gt;
&lt;p&gt;
        DataGridView1.DataSource = dt&lt;br /&gt;
        FindDups(dt)&lt;br /&gt;
    End Sub
&lt;/p&gt;
&lt;p&gt;
    Public Sub FindDups(ByVal dt As DataTable)&lt;br /&gt;
        Dim dv As New DataView(dt)&lt;br /&gt;
        dv.Sort = "Number, Name"&lt;br /&gt;
        For x As Integer = 0 To dv.Count - 2&lt;br /&gt;
            Dim drv As DataRowView = dv.Item(x)&lt;br /&gt;
            Dim drvNext As DataRowView = dv.Item(x + 1)&lt;br /&gt;
            If drv.Item("Name").ToString = drvNext.Item("Name").ToString AndAlso drv.Item("Number").ToString = drvNext.Item("Number").ToString Then&lt;br /&gt;
                drv.Delete()&lt;br /&gt;
            End If&lt;br /&gt;
        Next&lt;br /&gt;
    End Sub&lt;br /&gt;
End Class
&lt;/p&gt;
&lt;p&gt;
&lt;br /&gt;
Public Class TrueRandom&lt;br /&gt;
    Public Shared Function Rand(ByVal MaxNum As Integer) As Integer&lt;br /&gt;
        Dim rnd(20) As Byte&lt;br /&gt;
        Dim num As Long
&lt;/p&gt;
&lt;p&gt;
        Dim generator As New RNGCryptoServiceProvider
&lt;/p&gt;
&lt;p&gt;
        generator.GetBytes(rnd)&lt;br /&gt;
        For x As Integer = 0 To 20&lt;br /&gt;
            num += CInt(rnd(x))&lt;br /&gt;
        Next x&lt;br /&gt;
        Return CInt(num Mod MaxNum)&lt;br /&gt;
    End Function
&lt;/p&gt;
&lt;p&gt;
End Class
&lt;/p&gt;
&lt;p&gt;
 
&lt;/p&gt;
&lt;img src="http://blog.onteorasoftware.net/aggbug/111.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ken Tucker</dc:creator>
            <guid>http://blog.onteorasoftware.net/archive/2007/09/16/find-duplicate-records-in-a-datatable.aspx</guid>
            <pubDate>Sun, 16 Sep 2007 18:32:11 GMT</pubDate>
            <wfw:comment>http://blog.onteorasoftware.net/comments/111.aspx</wfw:comment>
            <comments>http://blog.onteorasoftware.net/archive/2007/09/16/find-duplicate-records-in-a-datatable.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://blog.onteorasoftware.net/comments/commentRss/111.aspx</wfw:commentRss>
        </item>
    </channel>
</rss>