【发布时间】:2011-11-22 21:07:12
【问题描述】:
如何确定 DataReader 的结果集中是否存在列?
我试试:
int columnOrdinal = reader.GetOrdinal("LastName");
columnExists = (columnOrdinal < 0);
但是如果列不存在,GetOrdinal 会抛出异常。我的情况也不例外。恰恰相反。这是……非凡的。
注意:与我的问题无关,但是,我想知道列是否存在的真正原因是因为我想获得序数位置 列,如果该列不存在则不抛出异常:
int columnOrdinal = reader.GetOrdinal("Lastname");
注意:与我的问题无关,但是,真正我想知道列是否存在的原因,因为我想知道如果该列包含 null:
itIsNull = reader.IsDBNull(reader.GetOrdinal("Lastname"));
不幸的是IsDBNull 只接受一个序数,而GetOrdinal 抛出一个异常。所以我只剩下:
if (ColumnExists(reader, "Lastname"))
{
itIsNull = reader.IsDBNull(reader.GetOrdinal("Lastname"));
}
else
itIsNull = false;
注意: 与我的问题无关,但是,我想知道列是否存在的真正原因是因为有时该列不会出现在结果集中,而我不想抛出异常处理数据库结果,因为它不是异常的。
【问题讨论】:
-
NotRelatedToMyQuestionException
-
@hatchet 这当然不是我要对数据集的每一行调用的技术
-
@TomasVoracek 我正在尝试避免异常,在这里你抛出更多!
-
如果您阅读了上面链接的 stackoverflow 问题中的其他答案,您会看到 GetSchemaTable 可能包含实际数据读取器中不存在的列。
标签: ado.net sqldatareader datareader