Hi,

I have a question regarding how NHibernate.AdoNet.SqlClientBatchingBatcher 
handles DbExceptions in:
https://github.com/nhibernate/nhibernate-core/blob/master/src/NHibernate/AdoNet/SqlClientBatchingBatcher.cs

protected override void DoExecuteBatch(IDbCommand ps)
{
 {...}
 if (Factory.Settings.SqlStatementLogger.IsDebugEnabled)
        {
        
*Factory.Settings.SqlStatementLogger.LogBatchCommand(_currentBatchCommandsLog.ToString());*
*       _currentBatchCommandsLog = new StringBuilder().AppendLine("Batch 
commands:");*
        }
int rowsAffected;
try
{
        rowsAffected = _currentBatch.ExecuteNonQuery();
}
catch (DbException e)
{
        *throw ADOExceptionHelper.Convert(Factory.SQLExceptionConverter, e, 
"could not execute batch command.");*
}
{...}
}

*Why _currentBatchCommandsLog isn't **passed to the ADOExceptionHelper.Convert 
method?*

This way the information about the sql statement causing the DbException is 
lost and in the end I'm left only with the MS SQL exception message. I don't 
want to log the batch commands always because this would cause too much 
overhead. 

Further investigation showed that ADOExceptionHelper.Convert tries to extract 
the sql query from the DbException using:
string sql1 = (string) sqle.Data[(object) "actual-sql-query"];

But this exception data is set only in AbstractBatcher.ExecuteNonQuery, but in 
this case SqlCommandSet.ExecuteNonQuery is executed instead. 

I can't see any extensions/injection points thus it seems that my hands are 
tied with the current codebase. Maybe I'm missing something? It looks like an 
inconsistent behavior though.

--
Marcin Kotula
 


-- 

--- 
You received this message because you are subscribed to the Google Groups 
"nhibernate-development" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to nhibernate-development+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to