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;
}我试图在第一个循环中处理DBNull,但在第二个循环中,我得到了由DBNull类型的NewRow()创建的所有行。
例如rowType ~ DBNull
为什么会发生这种情况?
发布于 2011-11-29 22:30:33
您可以使用此命令来确定您正在查看的值是否为DBNull:
reader.IsDBNull(i)请参阅http://msdn.microsoft.com/en-us/library/system.data.idatarecord.isdbnull.aspx
要查找您所在列的类型,请尝试执行以下操作:
reader.GetFieldType(i)请参阅http://msdn.microsoft.com/en-us/library/system.data.idatarecord.getfieldtype.aspx
此外,我认为如果您在第一次循环之后通过执行row = tbl.NewRow()来放弃引用,那么在第一行就没有必要使用new DataRow()。
发布于 2011-11-29 22:11:55
使用Convert.IsDBNull(reader[i])。
将GetType()结果与字符串进行比较是很糟糕的。
https://stackoverflow.com/questions/8312129
复制相似问题