Datarow -Typ ist dbnull
Frage
private DataRow getDataRowFromReader(IDataReader reader)
{
DataRow row = new DataRow();
DataTable tbl = new DataTable();
for (int i = 0; i < reader.FieldCount; i++)
{
Type type = reader[i].GetType();
if(type.Equals(Type.GetType("DBNull")) || type.Equals(Type.GetType("System.DBNull")))
type = typeof(string);
DataColumn col = new DataColumn(reader.GetName(i), type);
tbl.Columns.Add(col);
}
row = tbl.NewRow();
for (int i = 0; i < reader.FieldCount; i++)
{
Type readerType = reader[i].GetType();
Type rowType = row[i].GetType();
if (readerType.Equals(rowType))
row[i] = reader.GetValue(i);
else
row[i] = reader.GetString(i);
}
return row;
}
Ich versuche, DBNULL in der 1. Schleife zu handhaben, aber in der zweiten habe ich dann alle Zeilen von Newrow () vom DBNULL -Typ erstellt.
zB RowType ~ dbnull
Warum ist das passiert?
Lösung
Sie können dies verwenden, um herauszufinden, ob der Wert, den Sie betrachten, dbnull ist:
reader.IsDBNull(i)
sehen http://msdn.microsoft.com/en-us/library/system.data.idatarecord.isdbnull.aspx
Um den Typ der Spalte zu finden, in dem Sie sich befinden, versuchen Sie Folgendes:
reader.GetFieldType(i)
sehen http://msdn.microsoft.com/en-us/library/system.data.idatarecord.getfieldtype.aspx
Ich denke auch, dass es nicht nötig ist new DataRow()
In der ersten Zeile, wenn Sie diese Referenz aufgeben, indem Sie dies tun row = tbl.NewRow()
Nach der ersten Schleife.
Andere Tipps
Verwenden Convert.IsDBNull(reader[i])
.
Das Vergleich von Gettype () -Ergebnis mit String ist schrecklich.