Click here to Skip to main content
15,896,557 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
How to clone the DataTable and change its column and row type to decimal and return the DataTable ?
C#
private static DataTable GetDataTabletFromCSVFile(string csv_file_path)
{
    DataTable csvData = new DataTable();
    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);
            ;
        }
        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;
                }
            }
            csvData.Rows.Add(fieldData);
        }
    }

    return csvData;
} 
Posted
Updated 5-Mar-14 22:54pm
v3

1 solution

Quote:
parse the strings to decimal using decimal.TryParse



C#
foreach (string column in colFields)
{
    DataColumn datacolumn = new DataColumn(column, typeof(decimal));
    datacolumn.AllowDBNull = true;
    csvData.Columns.Add(datacolumn);
}
while (!csvReader.EndOfData)
{
    string[] fieldData = csvReader.ReadFields();
    DataRow addedRow = csvData.Rows.Add();
    for (int i = 0; i < fieldData.Length; i++)
    {
        decimal value;
        if(decimal.TryParse(fieldData[i].Trim(), out value))
            addedRow.SetField<decimal?>(i, value);
        else
            addedRow.SetField<decimal?>(i, null);
    }
}
 
Share this answer
 
v3

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900