将文件解析为数据表如果说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);
}
}
}
答案 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
而不是实际的空字符串。请注意,如果您使用Field
,null
的调用将处理转换为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;