Найти тип данных поля из объекта DataReader
У меня есть следующий запрос:
SqlCommand cmd = new SqlCommand("Select employee_id,
lastname, firstname from Employees", conn);
//Execute reader
SqlDataReader reader = cmd.ExecuteReader();
используя sqlDatareader, я просто хочу узнать поле типа данных:
Предположим, я хочу знать тип данных поля employee_id, как узнать, используя переменную reader
?
Спасибо
Ответы
Ответ 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)
В соответствии с вашей дальнейшей логикой вы можете форматировать эту функцию в простой текст или условную форму.
Ответ 4
.GetDataTypeName
может быть следующим:
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.getdatatypename.aspx
Ответ 5
Вы можете использовать метод GetFieldType
, передавая порядковый номер столбца, тип которого вы хотите получить. Он возвращает System.Type поля.
В качестве примера, если вы хотите получить тип первого столбца, вы можете сделать var firstColType = reader.GetFieldType(0);