Csharp/C#教程:将DataSet DataTable转换为CSV分享


将DataSet DataTable转换为CSV

如果有办法从DataTable或DataSet生成CSV文件,请告诉我? 具体而言,无需手动迭代DataTable行和连接。

请帮忙

有几种方法可以做到这一点。

最简单的(IMO)之一是使用FileHelpers Library

 FileHelpers.CsvEngine.DataTableToCsv(dataTable, filename); 

一个相对简单,紧凑和非常灵活的解决方案可以是以下扩展方法:

 public static string ToCsv(this DataTable table, string colSep = "", string rowSep = "rn") { var format = string.Join(colSep, Enumerable.Range(0, table.Columns.Count) .Select(i => string.Format("{{{0}}}", i))); return string.Join(rowSep, table.Rows.OfType() .Select(i => string.Format(format, i.ItemArray))); } 

请注意,此解决方案可能会导致大量数据出现问题,在这种情况下,您应该对输出进行流式处理。 引用和格式化当然会使代码更复杂。

我希望,还有一种可能的方法:

  static void Main(string[] args) { DataTable dt = new DataTable("MyTable"); dt.Columns.Add("Id", typeof(int)); dt.Columns.Add("Name", typeof(string)); DataRow dr1 = dt.NewRow(); dr1["Id"] = 1; dr1["Name"] = "John Smith"; dt.Rows.Add(dr1); DataRow dr2 = dt.NewRow(); dr2["Id"] = 2; dr2["Name"] = "John West"; dt.Rows.Add(dr2); List list = dt.AsEnumerable().ToList(); var strlist = from dr in list select dr[0] + ", " + dr[1]; var csv = string.Join(Environment.NewLine,strlist); Console.WriteLine(csv); } 

所以这是一个相当奇怪的解决方案,但它比大多数工作都快,因为它使用了JSON.net库的序列化。 这大大加快了解决方案的速度。

脚步:

  1. 在数据表中创建每个列名的数组,应该很简单
  2. 使用JSON.net将数据表转换为json字符串

    string json = JsonConvert.SerializeObject(dt, Formatting.None);

  3. 开始在c#字符串上使用Replace函数并删除所有json格式的json字符串。

    json = json.Replace(""", "").Replace("},{", "n").Replace(":", "").Replace("[{", "").Replace("}]", "");

  4. 然后使用步骤1中的数组从json字符串中删除所有列名。 你留下了一个csv格式的字符串。

  5. 考虑使用在步骤1中创建的数组将列名添加回csv格式的第一行。

    上述就是C#学习教程:将DataSet DataTable转换为CSV分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)

 //Dataset To Xls ExportDataSetToCsvFile(DS,@"C:\"); internal static void ExportDataSetToCsvFile(DataSet _DataSet, string DestinationCsvDirectory) { try { foreach (DataTable DDT in _DataSet.Tables) { String MyFile = @DestinationCsvDirectory + "\_" + DDT.TableName.ToString() + DateTime.Now.ToString("yyyyMMddhhMMssffff") + ".csv";//+ DateTime.Now.ToString("ddMMyyyyhhMMssffff") using (var outputFile = File.CreateText(MyFile)) { String CsvText = string.Empty; foreach (DataColumn DC in DDT.Columns) { if (CsvText != "") CsvText = CsvText + "," + DC.ColumnName.ToString(); else CsvText = DC.ColumnName.ToString(); } outputFile.WriteLine(CsvText.ToString().TrimEnd(',')); CsvText = string.Empty; foreach (DataRow DDR in DDT.Rows) { foreach (DataColumn DCC in DDT.Columns) { if (CsvText != "") CsvText = CsvText + "," + DDR[DCC.ColumnName.ToString()].ToString(); else CsvText = DDR[DCC.ColumnName.ToString()].ToString(); } outputFile.WriteLine(CsvText.ToString().TrimEnd(',')); CsvText = string.Empty; } System.Threading.Thread.Sleep(1000); } } } catch (Exception Ex) { throw Ex; } } 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请点击右边联系管理员删除。

如若转载,请注明出处:https://www.ctvol.com/cdevelopment/1008807.html

(0)
上一篇 2021年12月29日
下一篇 2021年12月29日

精彩推荐