【问题标题】:CSV to SQL - Add 1 day to a Date in a datacolumnCSV 到 SQL - 将 1 天添加到数据列中的日期
【发布时间】:2016-03-21 01:19:57
【问题描述】:

我正在尝试将 1 天添加到某个数据列 ['RecordAddedDate'] 中的所有日期

csvData.Columns.AddRange(new DataColumn[3] {                     
new DataColumn("Manufacturer", typeof(string)),
new DataColumn("SupplierCode", typeof(string)),
new DataColumn("RecordAddedDate", typeof(DateTime))});

目前我有这个工作:

for (int rowIndex = 0; rowIndex < csvData.Rows.Count; rowIndex++)
{
DateTime dt2 = DateTime.Parse(fieldData[2]);
var newDate = dt2.AddDays(1);
csvData.Rows[rowIndex][2] = newDate;                                    
}

但它只会将 1 天添加到从 csv 读取的第一行,而不会添加其余部分。

有什么帮助吗?

这是从 csv 读取数据并添加数据的 while 循环

 while (!csvReader.EndOfData)
                {
                    string[] fieldData = csvReader.ReadFields();
                    //Making empty value as null
                    for (int i = 0; i < fieldData.Length; i++)
                    {
                        Console.WriteLine(fieldData[i]);
                        if (fieldData[i] == "")
                        {
                            fieldData[i] = null;
                        }

                        for (int rowIndex = 0; rowIndex < csvData.Rows.Count; rowIndex++)
                        {
                            DateTime dt2 = csvData.Rows[rowIndex].Field<DateTime>(2);
                            DateTime newDate = dt2.AddDays(1);
                            csvData.Rows[rowIndex][2] = newDate;
                        }                             

                    }
                    csvData.Rows.Add(fieldData);
                    Console.WriteLine("Rows count:" + csvData.Rows.Count);
                }
            }
        return csvData;

【问题讨论】:

  • 这里的fieldData 是什么?你不应该从csvData.Rows[rowIndex][2]开始吗?
  • csvData 是数据表。我现在将行索引编辑为一个较小的 int,因为它是一个大表,我不想在这篇文章中全部添加。
  • 为什么不使用 SSIS 将数据从 CSV 移动到 Excel?如果需要,它支持从 Excel 导入和自定义操作。
  • 我没有问过csvData——这似乎相当明显。我询问了fieldData,这是你用来获取初始值的。一个简短但完整的程序演示该问题会更容易帮助您。
  • 对不起,我错过了阅读。 fieldData 是从 csv 输入到数组中的行数据。我也更新了我原来的帖子。

标签: c# csv datetime sqlbulkcopy datacolumn


【解决方案1】:

fieldData[2] 是什么?你总是在循环中使用它,所以难怪你总是得到相同的DateTime。如果表格已经填满并且您想更新一个值,请使用 csvData.Rows[rowIndex][2] = csvData.Rows[rowIndex].Field&lt;DateTime&gt;(2).AddDays(1);

for (int rowIndex = 0; rowIndex < csvData.Rows.Count; rowIndex++)
{
    DateTime dt2 = csvData.Rows[rowIndex].Field<DateTime>(2);
    DateTime newDate = dt2.AddDays(1);
    csvData.Rows[rowIndex][2] = newDate;                                    
}

【讨论】:

  • 嗨蒂姆,感谢您的回复。不幸的是,它仍然只将“RecordAddedDate”添加到第一行而不是其余的天。你认为这应该在一个while循环中吗?
  • @TeaAnyOne:只有当表格只包含一行时才可以。 for 循环非常适合这项任务。
  • 我 100% 有 2 行。当我从Console.WriteLine("Rows count:" + csvData.Rows.Count); 收到 2 时 ------ 这是问题吗? DateTime dt2 = DateTime.Parse(fieldData[2]); 我相信fieldData[2] 只引用第一行值而不是第二行值。有没有办法引用和解析一列数据?
  • @TeaAnyOne:fieldData 到底是什么?但是,它永远不会改变,我在回答中提到了这一点。为什么你没有使用我的代码?看来您只是忽略了我的回答。使用csvData.Rows[rowIndex].Field&lt;DateTime&gt;(2) 获取每一行的RecordAddedDate。然后加一天,写回单元格值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-20
  • 1970-01-01
  • 2012-04-16
  • 2018-03-22
  • 2010-10-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多