0

将文件解析为数据表,如果说它们对于 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);
        }

    }
}
4

2 回答 2

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;
于 2012-11-06T00:25:41.397 回答
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而不是实际的空白字符串。请注意,如果您使用它,调用 toField将处理该转换null(但如果它是 ,则必须小心不要调用Trimnull,否则NullReferenceException将抛出 a )。

于 2012-11-05T17:21:57.933 回答