将文件解析为数据表时允许空值

时间:2012-11-05 17:01:14

标签: c# parsing datatable

将文件解析为数据表如果说csv文件中的该行没有值,我如何允许它添加空值?

string fileName = @".csv";

using (StreamReader stream = new StreamReader(fileName))
{

    DataTable dt = CsvParser.Parse(stream);

    foreach (DataRow row in dt.Rows)
    {
        try
        {
            string lname = Convert.ToString(row[0].ToString().Trim());
            string fname = Convert.ToString(row[1].ToString().Trim());
            long s = Convert.ToInt64(row[2]);
            string b = Convert.ToString(row[3]);
            rec = row[0].ToString() + "," +
                    row[1].ToString() + "," +
                    row[2].ToString() + "," +
                    row[3].ToString() + ",";
            write.WriteLine(rec);
        }

    }
}

2 个答案:

答案 0 :(得分:0)

这取决于您在文件中对null的表示。根据您显示的内容,似乎whitepsace字符串为null(您在每个字符串上调用Trim),因此您只需检查并执行以下操作:

foreach (DataRow row in dt.Rows)
{
    // Get values.
    string lname = row[0].Field<string>().Trim();
    string fname = row[1].Field<string>().Trim();
    string sString = row[2].Field<string>().Trim();
    string b = row[3].Field<string>().Trim();

    // Format/parse.
    lname = lname == "" ? null : lname;
    fname = fname == "" ? null : fname;
    long? s = sString == "" ? (long?) null : Convert.ToInt64(sString);
    string b = b == "" ? null : b;

    // Process the values.
}

注意,根据CsvParser的实现情况,您可能会返回DbNull而不是实际的空字符串。请注意,如果您使用Fieldnull的调用将处理转换为Trim(但如果null,则必须小心不要在NullReferenceException上调用{{1}},否则,将抛出{{1}}。

答案 1 :(得分:0)

这可以接受空值。

 foreach (DataRow row in dt.Rows)
                    {
                        try
                        {

                                string lname = row[0].ToString();
                                string fname = row[1].ToString();

                                string ss1 = row[2].ToString();
                                long? s = ss1 == "" ? (long?)null : Convert.ToInt64(ssn1);

                                string dob1 = row[3].ToString();
                                string b = dob1 == "" ? null : dob1;