The error is getting caught but it NOT being collected because when I 
interrogate the Errors property on the process I get nothing even though 
the error is logged to the console.  I thought it was a threading issue 
with a race condition so I changed the PipelineExecutor to be single 
threaded and it still doesn't see any errors.

Here is my full stack trace...

System.InvalidOperationException: Column 'StratRunId' does not allow 
DBNull.Value.
   at System.Data.SqlClient.SqlBulkCopy.ConvertValue(Object value, _SqlMetaData 
metadata)
   at System.Data.SqlClient.SqlBulkCopy.WriteToServerInternal()
   at System.Data.SqlClient.SqlBulkCopy.WriteRowSourceToServer(Int32 
columnCount)
   at System.Data.SqlClient.SqlBulkCopy.WriteToServer(IDataReader reader)
   at Rhino.Etl.Core.Operations.SqlBulkInsertOperation.<Execute>d__0.MoveNext()
   at Rhino.Etl.Core.Enumerables.SingleRowEventRaisingEnumerator.MoveNext()
   at Rhino.Etl.Core.Enumerables.EventRaisingEnumerator.MoveNext()
   at 
Rhino.Etl.Core.Pipelines.ThreadPoolPipelineExecuter.<>c__DisplayClass1.<DecorateEnumerableForExecution>b__0(Object
 )
9/6/2012 9:08:04 AM [TRACE] Rhino.Etl.Core.Pipelines.ThreadPoolPipelineExecuter 
- Completed process LocationEtlProcess in 00:00:00.4080408
  

On Wednesday, September 5, 2012 8:31:45 PM UTC-4, Jason Meckley wrote:
>
> errors are caught and collected by each operation and the etl process. 
> Rhino.ETL does it's best to prevent errors from throwing through as that 
> would break the pipeline.
>
> On Wednesday, September 5, 2012 4:13:55 PM UTC-4, oliwa wrote:
>>
>> I have a simple process that pulls data from one database and is 
>> attempting to insert it into another. My process looks likes this...
>>
>> protected override void Initialize()
>> {
>>     Register(new ExtractLocationData());
>>     Register(new LoadLocationData("ConnectionString", "TableName"));
>> }
>>
>> protected override void OnFinishedProcessing(IOperation op)
>> {
>>     foreach (var exception in op.GetAllErrors())
>>     {
>>         throw exception;
>>     }
>> }
>>
>> protected override void PostProcessing()
>> {
>>     foreach (var exception in Errors)
>>     {
>>         throw exception;
>>     }
>> } 
>>
>> Now I am purposely trying to insert a NULL value into a column that is 
>> NOT NULL so I can test how to handle the errors.  In my console output I 
>> get the error like so...
>>
>> 9/5/2012 4:06:45 PM [ERROR] 
>> Rhino.Etl.Core.Pipelines.ThreadPoolPipelineExecuter - Failed to execute 
>> operation 
>> LoadLocationData
>>
>> System.Data.SqlClient.SqlException (0x80131904): Cannot insert the value 
>> NULL into column 'Id', table 'Location'; column does not allow nulls. INSERT 
>> fails.
>> The statement has been terminated.
>>
>> So I added 2 overrides in an attempt to catch the error and throw it so 
>> my process will fail but neither override finds any errors.
>>
>> It appears as if the SqlBulkInsertOperation class swallows the errors and 
>> doesn't add it to the error collection.
>>
>> Am I missing something?
>>
>> And on a side note, why would an error bubble up and cause the process to 
>> fail?  Having the process fail silently doesn't make any sense at all to me.
>>
>> Thanks!
>>
>>

-- 
You received this message because you are subscribed to the Google Groups 
"Rhino Tools Dev" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/rhino-tools-dev/-/02qb0x-LQMIJ.
To post to this group, send email to rhino-tools-dev@googlegroups.com.
To unsubscribe from this group, send email to 
rhino-tools-dev+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/rhino-tools-dev?hl=en.

Reply via email to