| Bug #25013 | Return Value parameter not found | ||
|---|---|---|---|
| Submitted: | 12 Dec 2006 15:44 | Modified: | 3 Jan 2007 10:57 |
| Reporter: | Chris Sinclair | Email Updates: | |
| Status: | Closed | Impact on me: | |
| Category: | Connector / NET | Severity: | S3 (Non-critical) |
| Version: | 5.0.2 | OS: | Windows (Windows 2000) |
| Assigned to: | CPU Architecture: | Any | |
[14 Dec 2006 13:40]
Tonci Grgin
Hi Chris and thanks for great problem report.
Verified as described by reporter. To repeat one needs a function with at least 2 parameters, 2nd one having ParameterDirection ReturnValue.
parameter_collection.cs
private MySqlParameter AddReturnParameter(MySqlParameter value)
{
for (int i = 0; i < items.Count; i++)
{
MySqlParameter p = (MySqlParameter)items[i];
if (p.Direction != ParameterDirection.ReturnValue) continue;
items[i] = value;
return value;
}
items.Add(value);
return value;
}
for (int i = 0; i < items.Count; i++) relies on parameter already being added.
Tested on latest SVN sources.
[14 Dec 2006 18:57]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/16978
[14 Dec 2006 18:59]
Reggie Burnett
Fixed in 1.0.9 and 5.0.3
[14 Dec 2006 19:00]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/16979
[3 Jan 2007 10:57]
MC Brown
A note has been added to the 1.0.9 and 5.0.3 changelogs.

Description: When adding parameter objects to a command object, if the parameter direction is set to ReturnValue before the parameter is added to the command object then when the command is executed it throws an error "Parameter '<Parameter Name>' not found in the collection." If the parameter direction is set after it has been added to the command then it works as expected. This is being used with: Windows 2000 Professional MySql Server 5.0 Connector/Net 5.0.2 .Net Framework 2.0 Visual Studio 2005 How to repeat: The following code recreates the problem. execSQL("CREATE FUNCTION fnTest(valin int) RETURNS INT " + " LANGUAGE SQL DETERMINISTIC BEGIN return valin * 2; END"); MySqlCommand cmd = new MySqlCommand("fnTest", conn); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add("?valin", 22); MySqlParameter prm = new MySqlParameter(); prm.ParameterName = "?retval"; prm.DbType = DbType.Int32; //Fails if you set the direction here prm.Direction = ParameterDirection.ReturnValue; cmd.Parameters.Add(prm); //Works if you set the direction here //prm.Direction = ParameterDirection.ReturnValue; cmd.ExecuteNonQuery(); Assert.AreEqual(44, cmd.Parameters[1].Value);