EL3 Invalid Operation Exception with Data Access Block

Hello,

I have a unit test, which does this and works using the new EL 3 block:

[

Test]

public

void TestUsingELNormally()

{

Database database =DatabaseFactory.CreateDatabase();

DbCommand command = database.GetStoredProcCommand("mains_Test");

database.AddInParameter(command,

"TableName",DbType.String,"mains_Events");

database.AddInParameter(command,

"TableSchema",DbType.String,"dbo");

DataSet results = database.ExecuteDataSet(command);

Assert.IsNotNull(results);

Assert.AreEqual(1, results.Tables.Count);

}

This works, however the following doesn't, and I get the error you see below. I create an abstracted array of database parameter, which is not passed directly into the database but the properties are passed along to a method that calls AddInParameter, AddOutParameter, etc. I don't know why, when broken up instead of all together, I get an error.

[

Test]

public

void TestExecutingDataTable()

{

List<DatabaseParameter> parameters =newList<DatabaseParameter>();

parameters.Add(

newDatabaseParameter("TableName",DbType.String,"mains_Events"));

parameters.Add(

newDatabaseParameter("TableSchema",DbType.String,"dbo"));

//Results in exception

DataTable results =base.ExecuteDataTable("dbo.mains_Test", parameters.ToArray());

Assert.IsNotNull(results);

Assert.AreEqual(9, results.Rows.Count);

}

//Method begin called by method above

protected

DataTable ExecuteDataTable(string commandName,DatabaseParameter[] parameters)

{

Database database =DatabaseFactory.CreateDatabase();

DbCommand command = database.GetStoredProcCommand(commandName);

DatabaseParameterHelper.AssignParametersToDatabase(database, command, parameters);

return database.ExecuteDataSet(commandName).Tables[0].Copy();

}

internal

staticvoid AssignParametersToDatabase(Database database,DbCommand command,DatabaseParameter[] parameters)

{

foreach (DatabaseParameter parameterin parameters)

{

if (parameter !=null && !string.IsNullOrEmpty(parameter.Name))

{

if (parameter.Direction ==ParameterDirection.Input)

database.AddInParameter(command, parameter.Name, parameter.Type, parameter.Value);

elseif (parameter.Direction ==ParameterDirection.Output)

database.AddOutParameter(command, parameter.Name, parameter.Type, -1);

elseif (parameter.Direction ==ParameterDirection.ReturnValue)

database.AddParameter(command, parameter.Name, parameter.Type, parameter.Direction,

null,DataRowVersion.Default, parameter.Value);

else

thrownewNotImplementedException();

}

}

}

Nucleo.Data.BaseDataGatewayTest.TestExecutingDataTable : System.InvalidOperationException : The number of parameters does not match number of values for stored procedure.

at Microsoft.Practices.EnterpriseLibrary.Data.Database.GetStoredProcCommand(String storedProcedureName, Object[] parameterValues)
at Microsoft.Practices.EnterpriseLibrary.Data.Database.ExecuteDataSet(String storedProcedureName, Object[] parameterValues)
at Nucleo.Data.BaseDataGateway.ExecuteDataTable(String commandName, DatabaseParameter[] parameters) in C:\Documents and Settings\Brian\My Documents\Visual Studio 2005\Projects\NucleoNet\Nucleo.Data\BaseDataGateway.cs:line 17
at Nucleo.Data.BaseDataGatewayTest.TestExecutingDataTable() in C:\Documents and Settings\Brian\My Documents\Visual Studio 2005\Projects\NucleoNet\Nucleo.Tests\Data\BaseDataGatewayTest.cs:line 21

I don't understand what the difference is.

Thanks.

[8200 byte] By [bmains] at [2008-1-2]