从DataReader对象中查找Field的数据types

我有以下查询:

SqlCommand cmd = new SqlCommand("Select employee_id, lastname, firstname from Employees", conn); //Execute reader SqlDataReader reader = cmd.ExecuteReader(); 

使用sqlDatareader,我只想知道数据types字段:

假设我想知道字段employee_id的数据types如何知道使用readervariables?

谢谢

reader.GetFieldType(int ordinal)

将返回该字段的.NETtypes,而:

reader.GetDataTypeName(int ordinal)

将返回一个string,表示数据源中字段的数据types(例如varchar )。 根据您描述的用例, GetFieldType可能对您更有用

您可以通过以下方式获取所有相关的元数据:

 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); } } } 

这有点矫枉过正,但我​​无法想象你会需要更多的types信息。 你也可以在if语句中使用hasRowsvariables或者用于exception处理。

使用.GetFieldType(colnameIndex)作为:

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

或者它可以只是: reader.GetFieldType(0)

根据你的进一步逻辑,你可以把这个函数变成简单的文本或条件forms。

您可以使用GetFieldType方法,传入您希望检索其types的列的序号。 它返回字段的System.Type。

作为一个例子,如果你想获得第一列的types,你可以做var firstColType = reader.GetFieldType(0);