从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如何知道使用reader
variables?
谢谢
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。
.GetDataTypeName
可能是你在之后:
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.getdatatypename.aspx
您可以使用GetFieldType
方法,传入您希望检索其types的列的序号。 它返回字段的System.Type。
作为一个例子,如果你想获得第一列的types,你可以做var firstColType = reader.GetFieldType(0);