私は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;
}
何が間違っているのかわかりません...オブジェクト配列であるため、配列に何かを割り当てることができるはずですが、どのようにして型の不一致が生じるのでしょうか?