zoukankan      html  css  js  c++  java
  • C# CSV Generic T

    This artice will write the main step to export generic data via csv with complete code and step by step.

    1.Down load EntityFramework

    Install-package entityframework -v 6.2.0

    2.Add EF data model with only one table for simplicity.Take the AdventureWorks2017.Sales.SalesOrderDetail for example.

    3.Override the ToString() method of the  newly added data model  cs file. 

    public override string ToString()
    {
    string formatMsg = SalesOrderID + "," + SalesOrderDetailID + "," + CarrierTrackingNumber + "," +
    OrderQty + "," + ProductID + "," + SpecialOfferID + "," + UnitPrice + "," + UnitPriceDiscount + "," +
    LineTotal + "," + rowguid + "," + ModifiedDate + Environment.NewLine;
    return formatMsg;
    }

    4.To be exact and precise,I will add StopWatch to log the cost in milliseconds.

    The full code as below.

    So far in my own pc, I can test as much as 3.8 million rows data and cost about 25 seconds as the screenshot illustrated.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.IO;
    using System.Diagnostics;

    namespace ConsoleApp322
    {
    class Program
    {
    static string cvsFileFullName = Directory.GetCurrentDirectory() + "\" + DateTime.Now.ToString("yyyyMMddHHmmssffff") + ".csv";
    static string fullLogFileName = Directory.GetCurrentDirectory() + "\" + DateTime.Now.ToString("yyyyMMdd") + "log.txt";
    static Stopwatch stopWatch = new Stopwatch();
    static int exportNumber = 0;
    static void Main(string[] args)
    {
    ExportTToCVS();
    }

    static void ExportTToCVS()
    {
    using (AdventureWorks2017Entities db = new AdventureWorks2017Entities())
    {
    List<SalesOrderDetail> orderList = db.SalesOrderDetails.ToList();
    orderList.AddRange(orderList);
    orderList.AddRange(orderList);
    orderList.AddRange(orderList);
    orderList.AddRange(orderList);
    orderList.AddRange(orderList);
    orderList.AddRange(orderList);
    ExportListTToCVS<SalesOrderDetail>(orderList);
    }
    }

    static void ExportListTToCVS<T>(List<T> dataList)
    {

    if(dataList!=null && dataList.Any())
    {
    stopWatch.Start();
    exportNumber = dataList.Count;
    StringBuilder orderBuilder = new StringBuilder();
    var firstRowData = dataList.FirstOrDefault();
    var orderProps = firstRowData.GetType().GetProperties().ToList();
    orderBuilder.AppendLine(string.Join(",", orderProps.Select(x=>x.Name).ToArray()));
    foreach(var dl in dataList)
    {
    orderBuilder.Append(dl.ToString());
    }

    using (StreamWriter streamWriter = new StreamWriter(cvsFileFullName))
    {
    streamWriter.WriteLine(orderBuilder.ToString());
    }

    stopWatch.Stop();
    Process proc = Process.GetCurrentProcess();
    long exportMemory = proc.PrivateMemorySize64;
    string exportMsg = $"File path:{cvsFileFullName},export number:{exportNumber}," +
    $"cost: {stopWatch.ElapsedMilliseconds} milliseconds,memory:{exportMemory}";
    File.AppendAllText(fullLogFileName, exportMsg + Environment.NewLine);
    }
    }
    }
    }

  • 相关阅读:
    SQL SERVER 表分区测试备忘
    理解信息系统中的流程与工序
    获取最后插入的id另外方法
    asp.net 项目在 IE 11 下出现 “__doPostBack”未定义 的解决办法
    定制应用Repeater 、ListView的模版
    JavaScript学习笔记——简单无缝循环滚动展示图片的实现
    JavaScript学习笔记——JS中的变量复制、参数传递和作用域链
    CSS学习笔记——定位position属性的学习
    CSS学习笔记——CSS中定位的浮动float
    CSS学习笔记——盒模型,块级元素和行内元素的区别和特性
  • 原文地址:https://www.cnblogs.com/Fred1987/p/10344396.html
Copyright © 2011-2022 走看看