0

ファイルをデータブルに解析すると、csv ファイルのその行に値がないなどの場合、null 値を追加できるようにするにはどうすればよいですか?

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

これは機能し、null 値を受け入れます。

 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ます。あなたが示しているものに基づいて、空白の文字列が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への呼び出しは、それを使用する場合、 へのFieldその変換を処理することに注意してください (ただし、それがの場合は呼び出さないように注意する必要があります。それ以外の場合は、 aがスローされます)。nullTrimnullNullReferenceException

于 2012-11-05T17:21:57.933 に答える