There isn't any prohibiting you from using Ayende's example code with IBatisNet 
now:

// his reflection sample...you could also use the delegate code
for (int i = 0; i < products.Count; i++)
{
 appendInfo.Invoke(sqlCmdSet, new object[] {
  SqlMapperAdapter.BuildDbCommand(sqlMapper, "Product.Update", products[i]});
}
executeNonQueryInfo.Invoke(sqlCmdSet,null);

Its just a matter of asking IBatisNet for the IDbCommand it generates 
internally:

public static IDbCommand BuildDbCommand(ISqlMapper sqlMapper, string statement, 
object parameter)
{
// retrieve the specific <update>, <delete>, or <insert> statement
MappedStatement mappedStatement = (MappedStatement) 
sqlMapper.MappedStatements[statement];

// instanciate a new IDbConnection and set its ConnectionString property
SqlMapSession session = new SqlMapSession(sqlMapper);
session.CreateConnection();

// set the CommandText and Connection property of an IDbCommand
RequestScope request = 
mappedStatement.Statement.Sql.GetRequestScope(mappedStatement, parameterObject, 
session);

// fill the Parameters property of the IDbCommand
mappedStatement.PreparedCommand.Create(request, session, 
mappedStatement.Statement, parameterObject);           

// DbCommandDecorator should expose its inner command as a property
FieldInfo fieldInfo = typeof(DbCommandDecorator).GetField("_innerDbCommand", 
BindingFlags.NonPublic | BindingFlags.Instance);
return (IDbCommand)fieldInfo.GetValue(request.IDbCommand);
}

A property needs to be added to one of the internal classes so the last line is 
just:

return mappedStatement.PreparedCommand.InnerCommand;

Is the batching supported on Sql Server 2000? 

IBatisNet is focused on using the ADO.Net interfaces for data access. Is it a 
good idea to make special cases for specific drivers and make calls to 
non-public members?

Perhaps we could extend SqlMapper and create a BatchSqlMapper that supports 
StartBatch() and ExecuteBatch() or modify MappedStatement.ExecuteUpdate to 
accept an execution strategy that chooses between ExecuteNonQuery or a custom 
stragey that relies on calling the non-public members of SqlCommandSet.

----- Original Message ----

From: "Tan, Lee" <[EMAIL PROTECTED]>

To: [email protected]

Sent: Tuesday, April 24, 2007 2:55:21 PM

Subject: Statement Batching



      Has there been much  interest in implementing batching in iBatis?

 http://ayende.com/Blog/archive/2006/09/13/7276.aspx has some good statistics 
on possible performance gains  accessing these included batching methods via 
reflection and  delegates.

 We're looking at the same problems and right now the  prevailing winds are 
pushing us to use iBatis only for Selects with all Updates, Inserts, and 
Deletes being handled manually and I'd like to avoid that if  possible.

 Thoughts?





 Lee Tan  

Information  Systems - Software Development 

 Quad/Graphics  

 Sussex,  Wisconsin 

414-566-6716 phone 

414-566-4010x6716 beeper  

[EMAIL PROTECTED] 

www.QG.com 

  









Reply via email to