예제 #1
0
 private void CrossJoinData(TInput2 passingRow)
 {
     if (!WasInMemoryTableLoaded)
     {
         InMemoryTarget.Wait();
         WasInMemoryTableLoaded = true;
     }
     foreach (TInput1 inMemoryRow in InMemoryData)
     {
         try
         {
             if (inMemoryRow != null && passingRow != null)
             {
                 TOutput result = CrossJoinFunc.Invoke(inMemoryRow, passingRow);
                 if (result != null)
                 {
                     Buffer.SendAsync(result).Wait();
                     LogProgress();
                 }
             }
         }
         catch (Exception e)
         {
             if (!ErrorHandler.HasErrorBuffer)
             {
                 throw e;
             }
             ErrorHandler.Send(e, string.Concat(ErrorHandler.ConvertErrorData <TInput1>(inMemoryRow), "  |--| ",
                                                ErrorHandler.ConvertErrorData <TInput2>(passingRow)));
         }
     }
 }
예제 #2
0
 private void WriteObject(TInput data)
 {
     if (data == null)
     {
         return;
     }
     try
     {
         string line;
         if (LineSelector != null)
         {
             line = LineSelector?.Invoke(data);
         }
         else
         {
             line = data.ToString();
         }
         StreamWriter.WriteLine(line);
     }
     catch (Exception e)
     {
         if (!ErrorHandler.HasErrorBuffer)
         {
             throw e;
         }
         ErrorHandler.Send(e, ErrorHandler.ConvertErrorData(data));
     }
 }
예제 #3
0
 protected override void TryBulkInsertData(TInput[] data)
 {
     TryAddDynamicColumnsToTableDef(data);
     try
     {
         TableData.ClearData();
         ConvertAndAddRows(data);
         var sql = new SqlTask(this, $"Execute Bulk insert")
         {
             DisableLogging    = true,
             ConnectionManager = BulkInsertConnectionManager
         };
         sql
         .BulkInsert(TableData, DestinationTableDefinition.Name);
         BulkInsertConnectionManager.CheckLicenseOrThrow(ProgressCount);
     }
     catch (Exception e)
     {
         if (!ErrorHandler.HasErrorBuffer)
         {
             throw e;
         }
         ErrorHandler.Send(e, ErrorHandler.ConvertErrorData <TInput[]>(data));
     }
 }
예제 #4
0
 private Action <TInput> AddLoggingAndErrorHandling(Action <TInput> writeAction)
 {
     return(new Action <TInput>(
                input =>
     {
         if (ProgressCount == 0)
         {
             NLogStart();
         }
         try
         {
             if (input != null)
             {
                 writeAction.Invoke(input);
             }
         }
         catch (Exception e)
         {
             if (!ErrorHandler.HasErrorBuffer)
             {
                 throw e;
             }
             ErrorHandler.Send(e, ErrorHandler.ConvertErrorData <TInput>(input));
         }
         LogProgress();
     }));
 }
예제 #5
0
        private int SetupArrayFillAction(SqlTask sqlT, int index)
        {
            int currentIndexAvoidingClosure = index;

            sqlT.Actions.Add(col =>
            {
                try
                {
                    if (_row != null)
                    {
                        var ar  = _row as System.Array;
                        var con = Convert.ChangeType(col, typeof(TOutput).GetElementType());
                        ar.SetValue(con, currentIndexAvoidingClosure);
                    }
                }
                catch (Exception e)
                {
                    if (!ErrorHandler.HasErrorBuffer)
                    {
                        throw e;
                    }
                    _row = default(TOutput);
                    ErrorHandler.Send(e, ErrorHandler.ConvertErrorData <TOutput>(_row));
                }
            });
            index++;
            return(index);
        }
예제 #6
0
        private void SetupObjectFillAction(SqlTask sqlT, string colName)
        {
            sqlT.Actions.Add(colValue =>
            {
                try
                {
                    if (_row != null)
                    {
                        var propInfo = TypeInfo.GetInfoByPropertyNameOrColumnMapping(colName);
                        //var con = colValue != null ? Convert.ChangeType(colValue, TypeInfo.UnderlyingPropType[propInfo]) : colValue;
                        //propInfo.TrySetValue(_row, con);
                        Object con = null;
                        if (colValue != null)
                        {
                            if (TypeInfo.UnderlyingPropType[propInfo].IsEnum)
                            {
                                con = colValue;
                            }
                            else
                            {
                                con = Convert.ChangeType(colValue, TypeInfo.UnderlyingPropType[propInfo]);
                            }
                        }

                        propInfo.TrySetValue(_row, con, TypeInfo.UnderlyingPropType[propInfo]);
                    }
                }
                catch (Exception e)
                {
                    if (!ErrorHandler.HasErrorBuffer)
                    {
                        throw e;
                    }
                    _row = default(TOutput);
                    ErrorHandler.Send(e, ErrorHandler.ConvertErrorData <TOutput>(_row));
                }
            });
        }
예제 #7
0
 private void SetupDynamicObjectFillAction(SqlTask sqlT, string colName)
 {
     sqlT.Actions.Add(colValue =>
     {
         try
         {
             if (_row != null)
             {
                 dynamic r = _row as ExpandoObject;
                 ((IDictionary <String, Object>)r).Add(colName, colValue);
             }
         }
         catch (Exception e)
         {
             if (!ErrorHandler.HasErrorBuffer)
             {
                 throw e;
             }
             _row = default(TOutput);
             ErrorHandler.Send(e, ErrorHandler.ConvertErrorData <TOutput>(_row));
         }
     });
 }