确定是否从datareader返回字段

时间:2011-09-01 21:01:28

标签: c# sql sqldatareader

我正在动态选择一个表来进行选择,并且所有表中都没有一个字段。在我的读者内部,我如何检查集合中是否存在该字段?

我正在使用它,但它只确定它是否为空......不管它是否存在:

if (myReader.GetValue(myReader.GetOrdinal("PrePay")) != DBNull.Value)
    myModel.PrePay = myReader.GetBoolean(myReader.GetOrdinal("PrePay"));

4 个答案:

答案 0 :(得分:0)

看看SqlDataReader.GetSchemaTable(假设myReader是一个SqlDataReader)。

答案 1 :(得分:0)

while(reader.Read())
{
    if(reader.GetOrdinal("FieldName")>=0) //field exists
    {
 ....
    }
}

答案 2 :(得分:0)

for (int i = 0; i < myReader.FieldCount; i++)
{
    string name = myReader.GetName(i);
    if (string.Equals(name , "PrePay", StringComparison.OrdinalIgnoreCase))
    {
        object value = myReader.GetValue(i);
        if (!Convert.IsDBNull(value))
        {
            myModel.PrePay = (bool)value;
        }
        break;
    }
}

如果您的读者返回多行,那么您应该在开头只执行一次查找,然后在迭代结果集时缓存序号以供使用。

答案 3 :(得分:0)

While(myReader.Read())
{ 
   MessageBox.Show(myReader.Item("PrePay").toString());
}

基本上,如果“PrePay”的值为null,则它不存在,否则它就存在。