将C#DataSet导出到文本文件

bob*_*988 17 c# export dataset text-files

网上有很多关于如何从文本文件中填充DataSet的例子,但我想反过来.我唯一能找到的就是这个,但似乎......不完整?

我希望它是一种可读格式,而不仅仅是逗号分隔,因此如果有意义,每行上的列之间的间距不相等.这是我的意思的一个例子:

Column1          Column2          Column3
Some info        Some more info   Even more info
Some stuff here  Some more stuff  Even more stuff
Bits             and              bobs
Run Code Online (Sandbox Code Playgroud)

注意:我的DataSet中只有一个DataTable,因此无需担心多个DataTable.

编辑:当我说"可读"时,我的意思是人类可读.

提前致谢.

Roy*_*ode 17

这应该很好地区分固定长度的字体文本,但它确实意味着它将处理完整的DataTable两次(传递1:每列找到最长的文本,传递2:输出文本):

    static void Write(DataTable dt, string outputFilePath)
    {
        int[] maxLengths = new int[dt.Columns.Count];

        for (int i = 0; i < dt.Columns.Count; i++)
        {
            maxLengths[i] = dt.Columns[i].ColumnName.Length;

            foreach (DataRow row in dt.Rows)
            {
                if (!row.IsNull(i))
                {
                    int length = row[i].ToString().Length;

                    if (length > maxLengths[i])
                    {
                        maxLengths[i] = length;
                    }
                }
            }
        }

        using (StreamWriter sw = new StreamWriter(outputFilePath, false))
        {
            for (int i = 0; i < dt.Columns.Count; i++)
            {
                sw.Write(dt.Columns[i].ColumnName.PadRight(maxLengths[i] + 2));
            }

            sw.WriteLine();

            foreach (DataRow row in dt.Rows)
            {
                for (int i = 0; i < dt.Columns.Count; i++)
                {
                    if (!row.IsNull(i))
                    {
                        sw.Write(row[i].ToString().PadRight(maxLengths[i] + 2));
                    }
                    else
                    {
                        sw.Write(new string(' ', maxLengths[i] + 2));
                    }
                }

                sw.WriteLine();
            }

            sw.Close();
        }
    }
Run Code Online (Sandbox Code Playgroud)


mas*_*ani 9

最好将数据导出为xml格式.

数据集有一个方法来完成这项工作:

DataSet ds = new DataSet(); 
ds.WriteXml(fileName);
Run Code Online (Sandbox Code Playgroud)

您可以读取xml并填充数据集数据,如下所示:

DataSet ds = new DataSet(); 
ds.ReadXml(fileName);
Run Code Online (Sandbox Code Playgroud)


sla*_*win 6

我会做的是:

foreach (DataRow row in myDataSet.Tables[0].Rows)
{
    foreach (object item in row.ItemArray)
    {
        myStreamWriter.Write((string)item + "\t");
    }
    myStreamWriter.WriteLine();
}
Run Code Online (Sandbox Code Playgroud)

如果你想要标题,可以在循环之前添加列名.我认为,虽然相当简单,但应该做到这一点.