Подтвердить что ты не робот

Найти тип данных поля из объекта DataReader

У меня есть следующий запрос:

SqlCommand cmd = new SqlCommand("Select employee_id, 
          lastname, firstname from Employees", conn);

//Execute reader
SqlDataReader reader = cmd.ExecuteReader();

используя sqlDatareader, я просто хочу узнать поле типа данных:

Предположим, я хочу знать тип данных поля employee_id, как узнать, используя переменную reader?

Спасибо

4b9b3361

Ответ 1

reader.GetFieldType(int ordinal)

вернет тип .NET в поле, а:

reader.GetDataTypeName(int ordinal)

вернет строку, представляющую тип данных поля в источнике данных (например, varchar). GetFieldType, вероятно, будет более полезен для вас, учитывая используемый вами случай использования

Ответ 2

Вы можете получить все соответствующие метаданные с помощью этого:

var metaDataList = new List<IDictionary<String, Object>>();

using (SqlDataReader reader = cmd.ExecuteReader())
{
    var hasRows = reader.HasRows;
    while (reader.Read())
    {
        for (int i = 0; i < reader.FieldCount; i++)
        {
            dynamic fieldMetaData = new ExpandoObject();
            var columnName = reader.GetName(i);
            var value = reader[i];
            var dotNetType = reader.GetFieldType(i);
            var sqlType = reader.GetDataTypeName(i);
            var specificType = reader.GetProviderSpecificFieldType(i);
            fieldMetaData.columnName = columnName;
            fieldMetaData.value = value;
            fieldMetaData.dotNetType = dotNetType;
            fieldMetaData.sqlType = sqlType;
            fieldMetaData.specificType = specificType;
            metaDataList.Add(fieldMetaData);
        }
    }
}

Это немного переборщило, но я не могу себе представить, что вам понадобится больше информации о типе, чем это. Вы также можете использовать переменную hasRows в инструкции if или для обработки исключений.

Ответ 3

Используйте .GetFieldType(colnameIndex) как:

If (reader.GetFieldType(0) Is GetType(String) Or reader.GetFieldType(0) Is
GetType(Date) )
{
...

}

или это может быть просто: reader.GetFieldType(0)

В соответствии с вашей дальнейшей логикой вы можете форматировать эту функцию в простой текст или условную форму.

Ответ 5

Вы можете использовать метод GetFieldType, передавая порядковый номер столбца, тип которого вы хотите получить. Он возвращает System.Type поля.

В качестве примера, если вы хотите получить тип первого столбца, вы можете сделать var firstColType = reader.GetFieldType(0);