示例#1
0
        /// <summary>
        /// 获取原生BulkCopy
        /// </summary>
        /// <param name="classBulkCopyName"></param>
        /// <param name="classRowsCopiedName"></param>
        /// <param name="oType"></param>
        /// <returns></returns>
        private long _GetBulkCopyAndWriteToServer(string classBulkCopyName, string classRowsCopiedName, object[] args)
        {
            _completedCount = 0;
            var assembly  = Factory.GetAssembly(this.DbType);
            var NameSpace = Factory.GetNamespace(this.DbType + "");
            var copyer    = assembly.CreateInstance($"{NameSpace}.{classBulkCopyName}", true, BindingFlags.Default, null, new object[] { this._client.ConnectionString }, null, null);
            var oType     = copyer.GetType();

            oType.GetProperty("DestinationTableName")?.SetValue(copyer, this.DestinationTableName, null);
            oType.GetProperty("BulkCopyTimeout")?.SetValue(copyer, this.BulkTimeout, null);
            //oType.GetProperty("BatchSize")?.SetValue(copyer, this.BatchSize, null);
            oType.GetProperty("BatchSize")?.SetValue(copyer, 1, null);
            oType.GetProperty("NotifyAfter")?.SetValue(copyer, this.NotifyAfter, null);
            var ColumnMappings = oType.GetProperty("ColumnMappings");

            _CopyMaps(ColumnMappings);

            EventInfo  evt                   = oType.GetEvent(classRowsCopiedName);
            var        delType               = evt.EventHandlerType;
            var        pts                   = delType.GetDelegateParameterTypes();
            MethodInfo doEventMethod         = this.GetType().GetMethod(nameof(bc_RowsCopied), BindingFlags.NonPublic | BindingFlags.Instance);
            MethodInfo concreteDoEventMethod = doEventMethod.MakeGenericMethod(pts[1]);
            Delegate   d = Delegate.CreateDelegate(delType, this, concreteDoEventMethod);

            evt.AddEventHandler(copyer, d);

            var wtServer = oType.GetMethod("WriteToServer", DelegateBuilder.GetParamsTypesFromParameters(args));

            wtServer.Invoke(copyer, args);
            return(_completedCount);
        }
示例#2
0
        private static Delegate _GetEmitCreateFunc(Type type, object[] args, Type[] argTypes)
        {
            Delegate fun;

            if (argTypes != null)
            {
                fun = DelegateBuilder.GetCreateDelegate(type, argTypes);
            }
            else
            {
                fun = DelegateBuilder.GetCreateDelegate(type, DelegateBuilder.GetParamsTypesFromParameters(args));
            }
            return(fun);
        }