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 [email protected].
For more options, visit https://groups.google.com/d/optout.