il.Emit(OpCodes.Ldstr,prop.Name);// stack is now [parameters] [parameters] [parameter] [parameter] [name]
il.EmitCall(OpCodes.Callvirt,typeof(IDataParameter).GetProperty("ParameterName").GetSetMethod(),null);// stack is now [parameters] [parameters] [parameter]
il.Emit(OpCodes.Ldtoken,unboxType);// stack is now [target][target][value][member-type-token]
il.EmitCall(OpCodes.Call,typeof(Type).GetMethod("GetTypeFromHandle"),null);// stack is now [target][target][value][member-type]
il.EmitCall(OpCodes.Call,typeof(Convert).GetMethod("ChangeType",newType[]{typeof(object),typeof(Type)}),null);// stack is now [target][target][boxed-member-type-value]
il.EmitCall(OpCodes.Call,typeof(Convert).GetMethod("ChangeType",newType[]{typeof(object),typeof(Type)}),null);// stack is now [target][target][boxed-member-type-value]
il.Emit(OpCodes.Unbox_Any,unboxType);// stack is now [target][target][typed-value]