определить, возвращено ли поле из устройства чтения данных - PullRequest
1 голос
/ 02 сентября 2011

Я динамически выбираю таблицу для выбора, и есть одно поле, которого нет во всех таблицах.Внутри моего читателя, как я могу проверить, существует ли это поле в коллекции?

Я использую это, но оно только определяет, является ли оно нулевым ... не существует ли оно или нет:

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

Ответы [ 4 ]

0 голосов
/ 02 сентября 2011
While(myReader.Read())
{ 
   MessageBox.Show(myReader.Item("PrePay").toString());
}

По сути, если значение «PrePay» равно нулю, оно не существует, иначе оно существует.

0 голосов
/ 02 сентября 2011
while(reader.Read())
{
    if(reader.GetOrdinal("FieldName")>=0) //field exists
    {
 ....
    }
}
0 голосов
/ 02 сентября 2011
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;
    }
}

Если ваш читатель возвращает более одной строки, вам следует выполнить поиск только один раз в начале, а затем кэшировать порядковый номер для использования при итерации по набору результатов.

0 голосов
/ 02 сентября 2011

Посмотрите на SqlDataReader.GetSchemaTable (при условии, что myReader является SqlDataReader).

...