Как я уже упоминал, зачем это делать в коде? Просто позвольте SQL Server избавить вас от проблем со значением по умолчанию ... Но если вы действительно хотите сделать это в коде, почему бы не добавить дополнительное поле после перечисления?
private static DataTable GetDataTabletFromCSVFile(string csv_file_path)
{
DataTable csvData = new DataTable();
try
{
using (TextFieldParser csvReader = new TextFieldParser(csv_file_path))
{
csvReader.SetDelimiters(new string[] { "," });
csvReader.HasFieldsEnclosedInQuotes = true;
string[] colFields = csvReader.ReadFields();
foreach (string column in colFields)
{
DataColumn datecolumn = new DataColumn(column);
datecolumn.AllowDBNull = true;
csvData.Columns.Add(datecolumn);
}
// ==== HERE ADD COLUMM
csvData.Columns.Add(new DataColumn("CreateDateTime"));
while (!csvReader.EndOfData)
{
string[] fieldData = csvReader.ReadFields();
//Making empty value as null
for (int i = 0; i < fieldData.Length; i++)
{
if (fieldData[i] == "")
{
fieldData[i] = null;
}
}
// === HERE ADD DEFAULT FIELD, but is weird to add to an array, so a but of Linq will help
var fieldList = fieldData.ToList(); // will result in List<string>
fieldList.Add(DateTime.Now.ToString());
fieldData = fieldList.ToArray();
csvData.Rows.Add(fieldData);
}
}
}
catch (Exception ex)
{
return null;
}
return csvData;
}
Просто ReadFields вернет массив полей - и вы можете создать новый массив с дополнительным полем и т. Д. Просто использовать linq и перезаписать ваш массив - это читабельно (и любой может прочитать, почему это происходит)