From: Date: March 19 2007 7:09pm Subject: Connector/NET commit: r637 - in branches/5.0: . Driver/Source TestSuite List-Archive: http://lists.mysql.com/commits/22291 X-Bug: 27135 Message-Id: <200703191809.l2JI9bBx020268@bk-internal.mysql.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Modified: branches/5.0/CHANGES branches/5.0/Driver/Source/parameter_collection.cs branches/5.0/TestSuite/ParameterTests.cs Log: Bug #27135 MySqlParameterCollection and parameters added with Insert Method Refactored the code for adding a parameter so we can call it from the Add() and Insert() methods Modified: branches/5.0/CHANGES =================================================================== --- branches/5.0/CHANGES 2007-03-19 16:18:43 UTC (rev 636) +++ branches/5.0/CHANGES 2007-03-19 18:09:37 UTC (rev 637) @@ -1,3 +1,10 @@ +Version 5.0.6 + + Bugs fixed + ---------- + Bug #27135 MySqlParameterCollection and parameters added with Insert Method + Bug #27253 Installer : Company info is different + Version 5.0.5 3/5/2007 Bugs fixed Modified: branches/5.0/Driver/Source/parameter_collection.cs =================================================================== --- branches/5.0/Driver/Source/parameter_collection.cs 2007-03-19 16:18:43 UTC (rev 636) +++ branches/5.0/Driver/Source/parameter_collection.cs 2007-03-19 18:09:37 UTC (rev 637) @@ -90,34 +90,7 @@ /// The newly added object. public MySqlParameter Add(MySqlParameter value) { - if (value == null) - throw new ArgumentException("The MySqlParameterCollection only accepts non-null MySqlParameter type objects.", "value"); - - if (value.Direction == ParameterDirection.ReturnValue) - return AddReturnParameter(value); - - string inComingName = value.ParameterName.ToLower(); - if (inComingName[0] == paramMarker) - inComingName = inComingName.Substring(1, inComingName.Length - 1); - - for (int i = 0; i < items.Count; i++) - { - MySqlParameter p = (MySqlParameter)items[i]; - string name = p.ParameterName.ToLower(); - if (name[0] == paramMarker) - name = name.Substring(1, name.Length - 1); - if (name == inComingName) - { - throw new MySqlException( - String.Format(Resources.ParameterAlreadyDefined, value.ParameterName)); - } - } - - int index = items.Add(value); - hash.Add(value.ParameterName, index); - ciHash.Add(value.ParameterName, index); - value.Collection = this; - return value; + return InternalAdd(value, -1); } private MySqlParameter AddReturnParameter(MySqlParameter value) @@ -388,7 +361,9 @@ /// public override void Insert(int index, object value) { - items.Insert(index, value); + if (!(value is MySqlParameter)) + throw new MySqlException("Only MySqlParameter objects may be stored"); + InternalAdd((MySqlParameter)value, index); } /// @@ -476,5 +451,40 @@ hash.Add(newName, index); ciHash.Add(newName, index); } + + private MySqlParameter InternalAdd(MySqlParameter value, int index) + { + if (value == null) + throw new ArgumentException("The MySqlParameterCollection only accepts non-null MySqlParameter type objects.", "value"); + + if (value.Direction == ParameterDirection.ReturnValue) + return AddReturnParameter(value); + + string inComingName = value.ParameterName.ToLower(); + if (inComingName[0] == paramMarker) + inComingName = inComingName.Substring(1, inComingName.Length - 1); + + for (int i = 0; i < items.Count; i++) + { + MySqlParameter p = (MySqlParameter)items[i]; + string name = p.ParameterName.ToLower(); + if (name[0] == paramMarker) + name = name.Substring(1, name.Length - 1); + if (name == inComingName) + { + throw new MySqlException( + String.Format(Resources.ParameterAlreadyDefined, value.ParameterName)); + } + } + + if (index == -1) + index = items.Add(value); + else + items.Insert(index, value); + hash.Add(value.ParameterName, index); + ciHash.Add(value.ParameterName, index); + value.Collection = this; + return value; + } } } Modified: branches/5.0/TestSuite/ParameterTests.cs =================================================================== --- branches/5.0/TestSuite/ParameterTests.cs 2007-03-19 16:18:43 UTC (rev 636) +++ branches/5.0/TestSuite/ParameterTests.cs 2007-03-19 18:09:37 UTC (rev 637) @@ -478,5 +478,17 @@ cmd.Parameters.RemoveAt(0); cmd.Parameters.Add(param1); } + + /// + /// Bug #27135 MySqlParameterCollection and parameters added with Insert Method + /// + [Test] + public void AddingParametersUsingInsert() + { + MySqlCommand cmd = new MySqlCommand(); + cmd.Parameters.Insert(0, new MySqlParameter("?id", MySqlDbType.Int32)); + MySqlParameter p = cmd.Parameters["?id"]; + Assert.AreEqual("?id", p.ParameterName); + } } }