我正在编写一个非常简单的方法来将 csv 转换为数据表,以便可以将其插入 SQL 数据库。它完全按照它应该的方式工作,除非我尝试用 DBNull.Value 替换空字符串,否则它会引发 ArrayTypeMismatchException。传入的流是带有数据的简单逗号分隔文件。
问题代码:
public static DataTable StreamToTable(Stream stream, bool headersAvailable, bool convertBlankToDBNull)
{
DataTable data = new DataTable();
StreamReader reader = new StreamReader(stream);
if (!reader.EndOfStream)
{
if (headersAvailable)
{
try
{
//get headers from first line
string[] headers = reader.ReadLine().Split(',');
//construct headers
for (int i = 0; i < headers.Length; i++)
{
data.Columns.Add(headers[i]);
}
}
catch (IOException ioEx)
{
return null;
}
}
while (!reader.EndOfStream)
{
object[] row = reader.ReadLine().Split(',');
if (convertBlankToDBNull)
{
for (int i = 0; i < row.Length; i++)
{
if (row[i].ToString().Equals(""))
{
row[i] = DBNull.Value; //this is where I get the exception
}
}
}
data.Rows.Add(row);
}
return data;
}
else return null;
}
我不知道我做错了什么......我应该能够为数组分配任何东西,因为它是一个对象数组,那么怎么会有类型不匹配呢?