From: Date: November 5 2007 6:10pm Subject: Connector/NET commit: r1060 - in branches/5.0: . Driver/Source/Types TestSuite/Source List-Archive: http://lists.mysql.com/commits/37112 X-Bug: 32094 Message-Id: <200711051710.lA5HAZwj024312@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/Types/MySqlString.cs branches/5.0/TestSuite/Source/ParameterTests.cs Log: fixed problem where string parameters who have their size set after their value could cause exceptions (Bug #32094) Modified: branches/5.0/CHANGES =================================================================== --- branches/5.0/CHANGES 2007-11-05 14:59:02 UTC (rev 1059) +++ branches/5.0/CHANGES 2007-11-05 17:10:34 UTC (rev 1060) @@ -20,6 +20,8 @@ errors. (Bug #31433) - improved the speed of load data local infile significantly - fixed MySqlDateTime.ToString() to properly return the date value (Bug #32010) + - fixed problem where string parameters who have their size set after their value could cause exceptions + (Bug #32094) Version 5.0.8 8/16/2007 Modified: branches/5.0/Driver/Source/Types/MySqlString.cs =================================================================== --- branches/5.0/Driver/Source/Types/MySqlString.cs 2007-11-05 14:59:02 UTC (rev 1059) +++ branches/5.0/Driver/Source/Types/MySqlString.cs 2007-11-05 17:10:34 UTC (rev 1060) @@ -97,8 +97,11 @@ void IMySqlValue.WriteValue(MySqlStream stream, bool binary, object val, int length) { string v = val.ToString(); - if (length > 0) - v = v.Substring(0, length); + if (length > 0) + { + length = Math.Min(length, v.Length); + v = v.Substring(0, length); + } if (binary) stream.WriteLenString(v); Modified: branches/5.0/TestSuite/Source/ParameterTests.cs =================================================================== --- branches/5.0/TestSuite/Source/ParameterTests.cs 2007-11-05 14:59:02 UTC (rev 1059) +++ branches/5.0/TestSuite/Source/ParameterTests.cs 2007-11-05 17:10:34 UTC (rev 1060) @@ -516,5 +516,36 @@ Assert.Fail(ex.Message); } } + + /// + /// Bug #32094 Size property on string parameter throws an exception + /// + [Test] + public void StringParameterSizeSetAfterValue() + { + execSQL("DROP TABLE IF EXISTS Test"); + execSQL("CREATE TABLE Test (v VARCHAR(10))"); + + MySqlCommand cmd = new MySqlCommand("INSERT INTO Test VALUES (?p1)", conn); + cmd.Parameters.Add("?p1", MySqlDbType.VarChar); + cmd.Parameters[0].Value = "123"; + cmd.Parameters[0].Size = 10; + cmd.ExecuteNonQuery(); + + MySqlDataAdapter da = new MySqlDataAdapter("SELECT * FROM Test", conn); + DataTable dt = new DataTable(); + da.Fill(dt); + Assert.AreEqual("123", dt.Rows[0][0]); + + cmd.Parameters.Clear(); + cmd.Parameters.Add("?p1", MySqlDbType.VarChar); + cmd.Parameters[0].Value = "123456789012345"; + cmd.Parameters[0].Size = 10; + cmd.ExecuteNonQuery(); + + dt.Clear(); + da.Fill(dt); + Assert.AreEqual("1234567890", dt.Rows[1][0]); + } } }