65.9K
CodeProject 正在变化。 阅读更多。
Home

在 .NET 3.5 中使用 LINQ to XML 和 LINQ to SQL 提取 XML 并插入批量数据

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.56/5 (5投票s)

2008年10月4日

CPOL

4分钟阅读

viewsIcon

65855

在 .NET 3.5 中使用 LINQ to XML 和 LINQ to SQL 提取 XML 并进行 SQL 批量更新。

引言

本文重点介绍如何读取 XML 内容,并使用 LINQ to XML、LINQ to SQL 和 LINQ 对数据库执行批量插入,并讨论 LINQ 的重要性。

背景

商业应用程序通常需要来自各种来源的批量数据。这些数据通常以 XML 格式提供,并且需要将数据更新到应用程序的数据库中。通常,这些操作都是批量完成的。此外,在执行任何批量操作之前,需要读取 XML 内容并将其转换为与应用程序的关系结构对齐的格式。在这里,我们将研究一种使用 LINQ 实现此目的的方法。

当然,我不打算在这里处理数千条记录,因为使用 LINQ to SQL 进行批量更新会花费大量时间,因为它需要进行内部验证和事务处理。因此,此解决方案将有其自身的局限性。

为了描述一个类似的场景,让我们从 RSS 源中读取 XML 内容,并将该内容插入到具有以下字段的表中:PostIDTitleDate。由于这是为了演示,所以让我们坚持这种简单的结构。 为了清晰起见,我将在此处使用控制台应用程序。

演示

在整个演示中,将使用 Visual Studio 2008 和 SQL Server 2005。 首先,让我们将 LINQ to SQL 数据上下文添加到我们的应用程序中。 这将连接到数据库,并将包含我们将要使用的数据模型。 要创建数据模型,请连接到您的数据库,并将所需的表拖到数据模型中。 看起来像这样

- 图 01 -

至于 XML 的来源,让我使用这个博客的 RSS 源。 这是网址:http://weblogs.asp.net/scottgu/rss.aspx

figure02.JPG

- 图 02 -

现在,让我们编写一些代码,该代码将读取 RSS 源并将内容写入数据库中名为RssFeed的表,这是代码

class Program
{

    static void Main(string[] args)
    {
        WriteRssToDb();
        Console.ReadLine();
    }

    private static void WriteRssToDb()
    {
        XDocument feed = XDocument.Load("http://weblogs.asp.net/scottgu/rss.aspx");
        SampleGayaniDataContext dbContext = new SampleGayaniDataContext();
        var feedpost = from post in feed.Descendants("item")

        select new RssFeed
        {
            Tile = post.Element("title").Value,
            Date = DateTime.Parse(post.Element("pubDate").Value)
        };

        dbContext.RssFeeds.InsertAllOnSubmit(feedpost);
        dbContext.SubmitChanges();
        Console.WriteLine("Successfully inserted, Check your database.");
    }
}
- 图 03 -

XDocument.Load 方法将指定 URL 中的 XML 内容加载到类型为 XDocument 的变量中,该变量将 XML 文档保存在内存中。接下来,对数据上下文(类型为 SampleGayaniDataContext 的数据库上下文)进行引用。 在 LINQ 查询中,feed.Descendants("item") 方法访问 XML 文档中的项目集合。 通过使用 select new RssFeed,它创建 RssFeed 类的新实例,并将帖子实例的值分配给 RssFeed 的新实例的属性。现在,提取的 XML 内容被馈送到 RssFeed 对象集合中,并通过隐式类型变量 feedpost,它保存 RssFeed 对象的集合。

InsertAllOnSubmit 方法接受 RssFeed 对象的集合,它将新记录插入到数据上下文中。 SubmitChanges 方法会将对数据上下文所做的更改提交到数据库。

运行应用程序会导致此通知,因此让我们检查数据库中插入的记录。

figure04.JPG

- 图 04 -

这是插入的记录

figure05.JPG

- 图 05 -

摘要

如上所示,.NET Framework 3.5 的新 LINQ、LINQ to SQL 和 LINQ to XML 在操作数据源方面是非常强大的技术。 在上述上下文中,LINQ to SQL 提供了一个在 SQL Server 数据库上执行关系操作的基础。 它足够丰富,具有所有必要的操作,例如插入、更新、删除。 此外,它验证类型,自动处理事务,并提供一种在发生并发冲突时进行通知的机制。

查看 LINQ to XML,它提供了查询和操作 XML 内容的方法和途径。 几乎所有属于 LINQ to XML 的类都可以在 System.Xml.Linq 中找到。

LINQ 是 .NET 3.5 中最强大的根机制,它允许您从多个数据源进行查询。 在此示例中,我使用了一个 XML 源以及一个关系数据源在一个查询中提取所需格式的数据。

如前所述,此解决方案显然会对批量操作支持的记录数有所限制,而不会降低应用程序性能。 但是,由于其内部验证和事务支持,我们可以确保操作的准确性。 总体而言,LINQ 在带来有效的类型安全查询和干净的代码方面非常令人印象深刻。 多亏了 LINQ,这个方便的解决方案才成为可能,并且在 .NET Framework 3.5 中,这真是太好了,难以置信。

© . All rights reserved.