【问题标题】:streamwriter writing duplicate lines to filestreamwriter 将重复的行写入文件
【发布时间】:2016-10-11 23:48:44
【问题描述】:

我被难住了。我有来自 3 个数据表的数据被写入文本文件,但是当我将某个表写入文件时,它正在写入重复项,我不知道为什么。

这是写入文件的代码

        public void writeCharge2(StreamWriter sw, string dos1, int i)
    {
        getCharges(dos1, SqlCon);
        foreach (DataRow row in chargeTable.Rows)
        {
            for (int n = 0; n <= chargeTable.Rows.Count -1; n++)
            {                    
                ChargeLine = chargeTable.Rows[n][0].ToString();

                writeCharge(sw, dos1, i, ChargeLine);
                sw.WriteLine();
                payChart.Reset();
                payGraph.Reset();
            }

        }
        chargeTable.Reset();
    }

    public void writeCharge(StreamWriter sw, string dos2, int i, string CPTLine)
    {
        getPayments(ChargeLine, SqlCon, dos2);
        string description = getDesc(CPTLine, SqlCon);
        sw.WriteLine("   Description: " + CPTLine + " - " + description);
        sw.WriteLine("-----------Payments-----------");

        if (i < payGraph.Rows.Count)
        {
            foreach (DataRow row in payGraph.Rows)
            {
                for (i = 0; i < row.ItemArray.Length -1; i++)
                {
                    DateTime payDate = Convert.ToDateTime(payGraph.Rows[i][0].ToString());
                    string payDate1 = payDate.ToString("MM/dd/yyyy");
                    decimal money = Convert.ToDecimal(payGraph.Rows[i][1].ToString());
                    string money1 = money.ToString("C");
                    string payer = payGraph.Rows[i][2].ToString();

                    sw.Write("Payment Date: " + payDate1 + " | ");
                    sw.Write("Amount: " + money1 + " | ");
                    sw.Write("Payer: " + payer);
                    sw.WriteLine();
                }

                sw.WriteLine();
            }
        }

    }

        public void writeData(StreamWriter sw)
    {
        clearTables();
        getDos(SqlCon);
        int i = 0;

        foreach(DataRow row in servicetable.Rows)
        {
            string dosNow = Convert.ToString(servicetable.Rows[i][0]);

            setupPat(sw, i);
            writeCharge2(sw, dosNow, i);
            sw.WriteLine(Environment.NewLine);
                i++;

        }

这是写入文件的方式,您可以看到正在写入的重复行

服务日期:2012 年 8 月 22 日
描述: 76775 - US RETROPERITONEAL LIMITED
------------付款------------
付款日期:09/10/2012 |金额:23.14 美元 |付款人:保险
付款日期:09/24/2012 |金额:5.78 美元 |付款人:保险

付款日期:09/10/2012 |金额:23.14 美元 |付款人:保险
付款日期:09/24/2012 |金额:5.78 美元 |付款人:保险


描述: 93922 - 非侵入性 1 级或 2 级肢体
------------付款------------
付款日期:09/10/2012 |金额:9.74 美元 |付款人:保险
付款日期:09/24/2012 |金额:2.43 美元 |付款人:保险

付款日期:09/10/2012 |金额:9.74 美元 |付款人:保险
付款日期:09/24/2012 |金额:2.43 美元 |付款人:保险


描述: 76775 - US RETROPERITONEAL LIMITED
------------付款------------
付款日期:09/10/2012 |金额:23.14 美元 |付款人:保险
付款日期:09/24/2012 |金额:5.78 美元 |付款人:保险

付款日期:09/10/2012 |金额:23.14 美元 |付款人:保险
付款日期:09/24/2012 |金额:5.78 美元 |付款人:保险

【问题讨论】:

  • 删除这一行 for (i = 0; i 并使用 row 而不是 payGraph.Rows[i]

标签: c# sql datatable streamwriter


【解决方案1】:

这是因为 foreach 循环在 writeCharge2 函数中不是必需的。您使用 foreach 迭代行,然后在每次迭代中打印所有行,因此对于 2 行,它们将被打印两次,对于 3 行 - 3 次等。

【讨论】:

    猜你喜欢
    • 2017-08-20
    • 1970-01-01
    • 2011-10-29
    • 2020-05-23
    • 2014-02-22
    • 2018-08-24
    • 1970-01-01
    • 1970-01-01
    • 2021-01-28
    相关资源
    最近更新 更多