我有以下查询:
SqlCommand cmd = new SqlCommand("Select employee_id,
lastname, firstname from Employees", conn);
//Execute reader
SqlDataReader reader = cmd.ExecuteReader();
Run Code Online (Sandbox Code Playgroud)
使用sqlDatareader,我只想知道数据类型字段:
假设我想知道字段employee_id的数据类型如何知道使用reader
变量?
谢谢
Jon*_*n G 59
reader.GetFieldType(int ordinal)
将返回该字段的.NET类型,同时:
reader.GetDataTypeName(int ordinal)
将返回一个字符串,表示数据源中字段的数据类型(例如varchar
).GetFieldType
考虑到您描述的用例,对您来说可能更有用
dev*_*ost 25
您可以使用以下方法获取所有相关元数据:
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
这有点矫枉过正,但我无法想象你需要更多的类型信息.您还可以在if语句中使用hasRows变量或进行异常处理.
使用.GetFieldType(colnameIndex)
如:
If (reader.GetFieldType(0) Is GetType(String) Or reader.GetFieldType(0) Is
GetType(Date) )
{
...
}
Run Code Online (Sandbox Code Playgroud)
或者它可以只是: reader.GetFieldType(0)
根据您的进一步逻辑,您可以将此功能转换为简单的文本或条件形式.
.GetDataTypeName
可能就是你所追求的:
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.getdatatypename.aspx