【问题标题】:Best approach to write huge sql dataset into xml file? [closed]将巨大的 sql 数据集写入 xml 文件的最佳方法? [关闭]
【发布时间】:2013-05-08 04:53:49
【问题描述】:

在 C# 中,我有一个巨大的数据集,我想用 write xml 将其写入 xml 文件,这是我的代码:

 using (var myConnection = new SqlConnection("Data Source=192.168.5.28;Initial Catalog=dbName;User ID=sa;Password=davood$;"))
        {

            var da = new SqlDataAdapter("select * from tblName", myConnection);
            var ds = new DataSet();
            da.Fill(ds);
            var filestream = File.Create("D:\\tblName.xml");
            var buffered = new BufferedStream(filestream);
            ds.WriteXml(buffered);
           // ds.WriteXml("D:\\tblName.xml", System.Data.XmlWriteMode.IgnoreSchema);

            //
            //using (var fileStream = File.Create("D:\\tblName.xml"))
            //{
            //    using (var zipStream = new GZipStream(fileStream, CompressionMode.Compress))
            //    {
            //        ds.WriteXml(zipStream, XmlWriteMode.WriteSchema);
            //    }
            //}
        }

但程序执行后(长时间执行),文件无法打开。 Tnx。

【问题讨论】:

    标签: c# xml dataset large-files


    【解决方案1】:

    在大量数据大小(批量操作)中,不建议使用 C#、ORM 和 ADO,以解决性能、内存、IO、往返和其他问题。
    我更喜欢使用 RDBMS制作文件的核心功能。

    顺便说一句,您可以使用Paging 来划分查询结果,并且对于任何页面,您都可以创建一个单独的 xml 文件,在 windows 操作系统上,我们有 4 gig 文件大小限制,因此页面大小必须平衡,因为您的表行大小。

    第一
    获取表行数。 (调用数据 Reader 和 else 被忽略)

    var dataRowsCount = select count(*) from tblName 
    

    第二
    选择一个有效的页面大小,将第一次调用的结果除以该页面大小,您将获得循环计数,如下所示:

    var pageSize = 1000;
    var pageCount = (dataRowsCount / PageSize) + 1;
    

    第三
    在一个循环中(基于第二阶段的结果),调用分页查询获取数据并创建多个xml文件。

    for(i=0;i<pageCount,i++)
    {
      // Call paged query and create files
      // SQL Server paged Query
      SELECT TOP pageSize columns  
      FROM Table    
      WHERE IDColumn NOT IN ( SELECT TOP pageSize*i IDColumn    
      FROM Table    
      ORDER BY SortColumn)    
      ORDER BY SortColumn;
    }
    

    MSSqlServer、Oracle和MYSql上的分页查询示例可以在here找到。

    【讨论】:

      【解决方案2】:

      我的怀疑是,如果数据“巨大”,则可能是在将其加载到数据集或将其写入磁盘,或者甚至在您试图打开生成的 XML 文件的任何应用程序中存在内存问题。

      我个人建议使用 DataReader 一次读取一条记录,然后一次输出一条 XML 记录。这样文件大小应该是无关紧要的。这是更多的工作,但更好的实践。

      如果这没有帮助:

      • 是否引发了任何异常?
      • 是否创建了 XML 文件?
      • 如果有,有多大?
      • 您尝试用什么打开它?
      • 当您尝试打开它时发生了什么?
      • 文件末尾是否有结束标签?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-05-21
        • 1970-01-01
        • 2014-03-31
        • 2011-06-28
        • 2020-05-01
        • 1970-01-01
        • 2020-04-17
        • 2020-09-01
        相关资源
        最近更新 更多