本文整理汇总了C#中IDataRecord.GetFieldType方法的典型用法代码示例。如果您正苦于以下问题:C# IDataRecord.GetFieldType方法的具体用法?C# IDataRecord.GetFieldType怎么用?C# IDataRecord.GetFieldType使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IDataRecord
的用法示例。
在下文中一共展示了IDataRecord.GetFieldType方法的14个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: GetValueExpression
internal static Expression GetValueExpression(this ParameterExpression sourceInstance, Type fieldType, IDataRecord record, int fieldIndex)
{
//类型
var tempType = record.GetFieldType(fieldIndex);
var methodExpression = GetMethodInfo(fieldType);
UnaryExpression dbNullCheckExpression = Expression.IsFalse(Expression.Call(sourceInstance, Method_IsDBNull, Expression.Constant(fieldIndex)));
ParameterExpression value = Expression.Variable(fieldType, "Value");
Expression valueExpression = Expression.Call(sourceInstance, methodExpression, Expression.Constant(fieldIndex));
if (!tempType.Equals(fieldType))
{
valueExpression = Expression.Convert(valueExpression, fieldType);
}
return Expression.Block(
new ParameterExpression[] { value },
Expression.IfThen(
dbNullCheckExpression,
Expression.Assign(value, valueExpression)
),
Expression.Convert(value, fieldType)
);
}
示例2: EventFactory
public EventFactory(IDataRecord record)
{
Contract.Requires(null != record, "The record must be valid.");
_eventIdOrdinal = record.GetOrdinal("EventClass");
var type = record.GetFieldType(_eventIdOrdinal);
_isEventIdAnInt = typeof(Int32) == type;
Debug.Assert(typeof(String) == type || typeof(Int32) == type, "The type should be a string or int.", "Type:" + type.FullName);
}
示例3: MapFromReader
private static Field MapFromReader(IDataRecord reader)
{
var field = new Field();
field.Id = (int)reader.GetValue<long>("MZ_COD");
field.Name = reader.GetValue<string>("MZ_NOMBRE");
field.Description = reader.GetValue<string>("MZ_DESC");
field.FieldType = reader.GetFieldType("MZ_TIPO");
return field;
}
示例4: CreateResult
private static QueryResult CreateResult(IDataRecord reader)
{
var result = new QueryResult();
for (var ii = 0; ii < reader.FieldCount; ii++)
{
var name = reader.GetName(ii);
var type = reader.GetFieldType(ii);
result.AddColumn(name, type);
}
return result;
}
示例5: DataRecordConverterSpec
public DataRecordConverterSpec(IDataRecord dataRecord, Type recordType)
{
var fields = new List<DataRecordFieldInfo>(dataRecord.FieldCount);
for (int index = 0; index < dataRecord.FieldCount; ++index)
{
fields.Add(new DataRecordFieldInfo(index, dataRecord.GetName(index), dataRecord.GetFieldType(index)));
}
_recordType = recordType;
_fields = fields.AsReadOnly();
}
示例6: GetValue
/// <summary>
/// Gets the value.
/// </summary>
/// <param name="index">The index.</param>
/// <param name="dataRecord">The data record.</param>
/// <returns></returns>
private object GetValue(int index, IDataRecord dataRecord)
{
if (dataRecord.IsDBNull(index))
{
return DBNull.Value;
}
if (dataRecord.GetFieldType(index) == typeof(Guid))
{
return dataRecord.GetGuid(index);
}
return new Guid(Convert.ToString(dataRecord[index]));
}
示例7: CreateDataColumns
private static void CreateDataColumns(IDataRecord reader, DataTable dt)
{
for (var i = 0; i < reader.FieldCount; i++)
{
var add = dt.Columns.Add();
var columnName = reader.GetName(i);
if (!String.IsNullOrEmpty(columnName)) add.ColumnName = columnName;
add.DataType = reader.GetFieldType(i);
}
}
示例8: CreateResultTable
private static DataTable CreateResultTable(IDataRecord reader)
{
DataTable dataTable = new DataTable();
for (int i = 0; i < reader.FieldCount; i++)
{
DataColumn dataColumn = new DataColumn(reader.GetName(i), reader.GetFieldType(i));
dataTable.Columns.Add(dataColumn);
}
return dataTable;
}
示例9: CreateBuilder
private static Build CreateBuilder(Type destinationType, IDataRecord dataRecord)
{
var method = new DynamicMethod("DynamicCreate", destinationType, new[] { typeof(IDataRecord) }, destinationType, true);
var generator = method.GetILGenerator();
var result = generator.DeclareLocal(destinationType);
generator.Emit(OpCodes.Newobj, destinationType.GetConstructor(Type.EmptyTypes));
generator.Emit(OpCodes.Stloc, result);
for (var i = 0; i < dataRecord.FieldCount; i++)
{
var propertyInfo = destinationType.GetProperty(dataRecord.GetName(i));
var endIfLabel = generator.DefineLabel();
if (propertyInfo != null && propertyInfo.GetSetMethod(true) != null)
{
generator.Emit(OpCodes.Ldarg_0);
generator.Emit(OpCodes.Ldc_I4, i);
generator.Emit(OpCodes.Callvirt, isDBNullMethod);
generator.Emit(OpCodes.Brtrue, endIfLabel);
generator.Emit(OpCodes.Ldloc, result);
generator.Emit(OpCodes.Ldarg_0);
generator.Emit(OpCodes.Ldc_I4, i);
generator.Emit(OpCodes.Callvirt, getValueMethod);
if (propertyInfo.PropertyType.IsGenericType
&& propertyInfo.PropertyType.Name.Equals(typeof(Nullable<>).Name))
{
generator.Emit(OpCodes.Unbox_Any, propertyInfo.PropertyType);
}
else
{
generator.Emit(OpCodes.Unbox_Any, dataRecord.GetFieldType(i));
}
generator.Emit(OpCodes.Callvirt, propertyInfo.GetSetMethod(true));
generator.MarkLabel(endIfLabel);
}
}
generator.Emit(OpCodes.Ldloc, result);
generator.Emit(OpCodes.Ret);
return (Build)method.CreateDelegate(typeof(Build));
}
示例10: CreateBuilder
private static Build CreateBuilder(Type destinationType, IDataRecord dataRecord)
{
Build builder;
BuilderKey builderKey = new BuilderKey(destinationType, dataRecord);
if (_builderCache.TryGetValue(builderKey, out builder))
{
return builder;
}
var method = new DynamicMethod("DynamicCreate", destinationType, new[] { typeof(IDataRecord) }, destinationType, true);
var generator = method.GetILGenerator();
var result = generator.DeclareLocal(destinationType);
generator.Emit(OpCodes.Newobj, destinationType.GetConstructor(Type.EmptyTypes));
generator.Emit(OpCodes.Stloc, result);
for (var i = 0; i < dataRecord.FieldCount; i++)
{
var propertyInfo = destinationType.GetProperty(dataRecord.GetName(i), BindingFlags.Public | BindingFlags.IgnoreCase | BindingFlags.Instance);
var endIfLabel = generator.DefineLabel();
if (propertyInfo != null && propertyInfo.GetSetMethod(true) != null)
{
generator.Emit(OpCodes.Ldarg_0);
generator.Emit(OpCodes.Ldc_I4, i);
generator.Emit(OpCodes.Callvirt, isDBNullMethod);
generator.Emit(OpCodes.Brtrue, endIfLabel);
generator.Emit(OpCodes.Ldloc, result);
generator.Emit(OpCodes.Ldarg_0);
generator.Emit(OpCodes.Ldc_I4, i);
generator.Emit(OpCodes.Callvirt, getValueMethod);
if (propertyInfo.PropertyType.IsGenericType
&& propertyInfo.PropertyType.GetGenericTypeDefinition().Equals(typeof(Nullable<>))
)
{
var nullableType = propertyInfo.PropertyType.GetGenericTypeDefinition().GetGenericArguments()[0];
if (!nullableType.IsEnum)
generator.Emit(OpCodes.Unbox_Any, propertyInfo.PropertyType);
else
{
generator.Emit(OpCodes.Unbox_Any, nullableType);
generator.Emit(OpCodes.Newobj, propertyInfo.PropertyType);
}
}
else
{
generator.Emit(OpCodes.Unbox_Any, dataRecord.GetFieldType(i));
}
generator.Emit(OpCodes.Callvirt, propertyInfo.GetSetMethod(true));
generator.MarkLabel(endIfLabel);
}
}
generator.Emit(OpCodes.Ldloc, result);
generator.Emit(OpCodes.Ret);
builder = (Build)method.CreateDelegate(typeof(Build));
_builderCache[builderKey] = builder;
return builder;
}
示例11: ReadFrom
public static void ReadFrom(this ICdlValueWriter writer, IDataRecord record, int index)
{
if (record.IsDBNull(index))
{
writer.SetNull();
return;
}
Type type = record.GetFieldType(index);
try
{
switch (Type.GetTypeCode(type))
{
case TypeCode.Boolean:
writer.SetBoolean(record.GetBoolean(index));
break;
case TypeCode.Byte:
writer.SetByte(record.GetByte(index));
break;
case TypeCode.Int16:
writer.SetInt16(record.GetInt16(index));
break;
case TypeCode.Int32:
writer.SetInt32(record.GetInt32(index));
break;
case TypeCode.Int64:
writer.SetInt64(record.GetInt64(index));
break;
case TypeCode.SByte:
unchecked
{
writer.SetSByte((sbyte) record.GetByte(index));
}
break;
case TypeCode.UInt16:
unchecked
{
writer.SetUInt16((ushort) record.GetInt16(index));
}
break;
case TypeCode.UInt32:
unchecked
{
writer.SetUInt32((uint) record.GetInt32(index));
}
break;
case TypeCode.UInt64:
unchecked
{
writer.SetUInt64((ulong) record.GetInt64(index));
}
break;
case TypeCode.DateTime:
writer.SetDateTime(record.GetDateTime(index));
break;
case TypeCode.Decimal:
writer.SetDecimal(record.GetDecimal(index));
break;
case TypeCode.Single:
writer.SetFloat(record.GetFloat(index));
break;
case TypeCode.Double:
writer.SetDouble(record.GetDouble(index));
break;
case TypeCode.String:
writer.SetString(record.GetString(index));
break;
default:
if (type == typeof (Guid))
{
writer.SetGuid(record.GetGuid(index));
}
else if (type == typeof (byte[]))
{
writer.SetByteArray((byte[]) record.GetValue(index));
}
else
{
writer.SetString(record.GetValue(index).ToString());
}
break;
}
}
catch (Exception err)
{
try
{
object val = record[index];
// try to read from boxed value (not very effective)
writer.ReadFrom(val);
}
catch
{
try
{
writer.SetString(record.GetString(index));
}
catch
{
// add information to exception
try
//.........这里部分代码省略.........
示例12: GenerateObjectBuilder
public static Func<IDataRecord, Dictionary<MappingEnum, object>, object> GenerateObjectBuilder( Type type, IDataRecord dataRecord, Dictionary<MappingEnum, object> mappings )
{
var propertyMaps = mappings.ContainsKey( MappingEnum.PropertyMap ) ? mappings[ MappingEnum.PropertyMap ] as Dictionary<PropertyInfo, PropertyMap> : new Dictionary<PropertyInfo, PropertyMap>();
var filteredPropertyMaps = propertyMaps.Where( x => x.Key.DeclaringType.IsAssignableFrom( type ) ).ToList();
var method = new DynamicMethod( "", typeof( object ), new[]
{
typeof( IDataRecord ),
typeof( Dictionary<MappingEnum, object> )
}, true );
var emitter = method.GetILGenerator();
var localPropertyMapsBuilders = new Dictionary<PropertyInfo, LocalBuilder>();
if ( filteredPropertyMaps.Count > 0 )
{
var propertyMapsLocal = emitter.DeclareLocal( typeof( List<PropertyMap> ) );
emitter.Emit( OpCodes.Ldarg_1 );
emitter.Emit( OpCodes.Ldc_I4, (int)MappingEnum.PropertyMap );
emitter.Emit( OpCodes.Callvirt, typeof( Dictionary<MappingEnum, object> ).GetMethod( "GetValueOrDefault", BindingFlags.Instance | BindingFlags.NonPublic ) );
emitter.Emit( OpCodes.Castclass, typeof( Dictionary<PropertyInfo, PropertyMap> ) );
emitter.Emit( OpCodes.Call, typeof( Dictionary<PropertyInfo, PropertyMap> ).GetProperty( "Values" ).GetGetMethod() );
emitter.Emit( OpCodes.Call, typeof( Enumerable ).GetMethod( "ToList" ).MakeGenericMethod( typeof( PropertyMap ) ) );
emitter.Emit( OpCodes.Stloc, propertyMapsLocal );
foreach ( var propertyMap in filteredPropertyMaps.Where( x => x.Value.PropertyMapType == PropertyMapType.Func ) )
{
var localBuilder = emitter.DeclareLocal( propertyMap.Value.SetAction.GetType() );
var index = propertyMaps.Keys.ToList().IndexOf( propertyMap.Key );
emitter.Emit( OpCodes.Ldloc, propertyMapsLocal );
emitter.Emit( OpCodes.Ldc_I4, index );
emitter.Emit( OpCodes.Call, typeof( List<PropertyMap> ).GetProperty( "Item" ).GetGetMethod() );
emitter.Emit( OpCodes.Call, typeof( PropertyMap ).GetProperty( "SetAction" ).GetGetMethod() );
emitter.Emit( OpCodes.Castclass, propertyMap.Value.SetAction.GetType() );
emitter.Emit( OpCodes.Stloc, localBuilder );
localPropertyMapsBuilders.Add( propertyMap.Key, localBuilder );
}
}
var objectVariable = emitter.DeclareLocal( type );
emitter.Emit( OpCodes.Newobj, type.GetConstructors()[ 0 ] );
emitter.Emit( OpCodes.Stloc, objectVariable );
for ( var i = 0; i < dataRecord.FieldCount; i++ )
{
if ( type == typeof( ExpandoObject ) )
{
var valueLocalBuilder = emitter.DeclareLocal( dataRecord.GetFieldType( i ) );
DataReaderEmitter.GetPropertyValue( emitter, dataRecord.GetFieldType( i ), i, false );
emitter.Emit( OpCodes.Stloc, valueLocalBuilder );
ExpandoObjectInteractor.SetExpandoProperty( emitter, objectVariable, dataRecord.GetName( i ), valueLocalBuilder );
}
else
{
PropertyInfo propertyInfo;
if ( filteredPropertyMaps.Any( x => x.Value.PropertyMapType == PropertyMapType.ColumnId && x.Value.ColumnId == i ) )
propertyInfo = filteredPropertyMaps.First( x => x.Value.ColumnId == i ).Key;
else if ( filteredPropertyMaps.Any( x => x.Value.PropertyMapType == PropertyMapType.ColumnName && x.Value.ColumnName == dataRecord.GetName( i ) ) )
propertyInfo = filteredPropertyMaps.First( x => x.Value.ColumnName == dataRecord.GetName( i ) ).Key;
else if ( filteredPropertyMaps.Any( x => x.Key.Name == dataRecord.GetName( i ) ) )
propertyInfo = null;
else
propertyInfo = type.GetProperty( dataRecord.GetName( i ) );
if ( propertyInfo != null && propertyInfo.GetActualPropertyType() == dataRecord.GetFieldType( i ) && filteredPropertyMaps.Where( x => x.Value.PropertyMapType == PropertyMapType.Func ).All( x => x.Key != propertyInfo ) )
{
emitter.Emit( OpCodes.Ldloc, objectVariable );
DataReaderEmitter.GetPropertyValue( emitter, propertyInfo.PropertyType, i, propertyInfo.IsNullable() );
emitter.Emit( OpCodes.Callvirt, propertyInfo.GetSetMethod() );
}
}
}
foreach ( var propertyMap in filteredPropertyMaps.Where( x => x.Value.PropertyMapType == PropertyMapType.Func ) )
{
var propertyMapLocal = localPropertyMapsBuilders[ propertyMap.Key ];
emitter.Emit( OpCodes.Ldloc, objectVariable );
emitter.Emit( OpCodes.Ldloc, propertyMapLocal );
emitter.Emit( OpCodes.Ldarg_0 );
emitter.Emit( OpCodes.Call, propertyMapLocal.LocalType.GetMethod( "Invoke" ) );
emitter.Emit( OpCodes.Callvirt, propertyMap.Key.GetSetMethod() ?? propertyMap.Key.GetSetMethod( true ) );
}
emitter.Emit( OpCodes.Ldloc, objectVariable );
emitter.Emit( OpCodes.Ret );
return (Func<IDataRecord, Dictionary<MappingEnum, object>, object>)method.CreateDelegate( typeof( Func<IDataRecord, Dictionary<MappingEnum, object>, object> ) );
}
示例13: DynamicDataRecordCodeGenerator
private string DynamicDataRecordCodeGenerator(IDataRecord source)
{
StringBuilder objectCreator = new StringBuilder("");
objectCreator.Append(string.Format("{0}return new {0}{1}", FirstTab, "{"));
for (int index = 0; index < source.FieldCount; index++)
{
// example: Address = (string)record[0],
objectCreator.Append(string.Format("{0} {1} = record.IsDBNull({3}) ? default({4}) : ({2})record[{3}],",
FirstTab,
source.GetName(index),
source.GetFieldType(index).FullName,
index,
source.GetFieldType(index)));
}
string body = objectCreator.ToString().TrimEnd(',') + FirstTab + "};";
return body;
}
示例14: GetUTF8String
private static String GetUTF8String(IDataRecord dr, string field) {
if (typeof(string) == dr.GetFieldType(dr.GetOrdinal(field))) {
return MediaWikiDA.Latin1ToUTF8(DbUtils.Convert.To<string>(dr[field], null));
} else {
return Encoding.UTF8.GetString(DbUtils.Convert.To<byte[]>(dr[field], null));
}
}