MySQL Connector/NET Release Notes

12.3 Changes in MySQL Connector/NET 6.2.4 (2010-08-30)

This release fixes bugs since 6.2.3.

Functionality Added or Changed

  • Procedure caching had a problem whereby if you created a procedure, dropped it, and recreated it with a different number of parameters an exception was generated.

    MySQL Connector/NET has been changed so that if the procedure is recreated with a different number of parameters, it will still be recognized. (Bug #52562)

Bugs Fixed

  • The calculation of lockAge in the Session Provider sometimes generated a System.Data.SqlTypes.SqlNullValueException. (Bug #55701)

  • Attempting to read Double.MinValue from a DOUBLE column in MySQL table generated the following exception:

    System.OverflowException : Value was either too large or too small for a Double.
    at System.Number.ParseDouble(String value, NumberStyles options, NumberFormatInfo
    at MySql.Data.Types.MySqlDouble.MySql.Data.Types.IMySqlValue.ReadValue(MySqlPacket
    packet, Int64 length, Boolean nullVal)
    at MySql.Data.MySqlClient.NativeDriver.ReadColumnValue(Int32 index, MySqlField field,
    IMySqlValue valObject)
    at MySql.Data.MySqlClient.ResultSet.ReadColumnData(Boolean outputParms)
    at MySql.Data.MySqlClient.ResultSet.NextRow(CommandBehavior behavior)
    at MySql.Data.MySqlClient.MySqlDataReader.Read()

    (Bug #55644)

  • After an exception, the internal datareader, MySqlCommand.Connection.Reader, was not properly closed (it was not set to null). If another query was subsequently executed on that command object an exception was generated with the message There is already an open DataReader associated with this Connection which must be closed first. (Bug #55558)

  • If using MySQL Server 5.0.x it was not possible to alter stored routines in Visual Studio. If the stored routine was clicked, and the context sensitive menu option, Alter Routine, selected, the following error was generated:

    Unable to load object with error: Object reference not
    set to an instance of an object

    (Bug #55170)

  • MySqlDataAdapter.Update() generated concurrency violations for custom stored procedure driven update commands that used UpdateRowSource.FirstReturnedRecord. (Bug #54895)

  • Several calls to DataAdapter.Update() with intervening changes to DataTable resulted in ConcurrencyException exceptions being generated. (Bug #54863)

  • The icon for the MySQL Web Configuration Tool was not displayed in Visual Studio for Web Application Projects. (Bug #54571)

  • The MySqlHelper object did not have an overloaded version of the ExecuteReader method that accepted a MySqlConnection object. (Bug #54570)

  • If MySqlDataAdapter was used with an INSERT command where the VALUES clause contained an expression with parentheses in it, and set the adapter.UpdateBatchSize parameter to be greater than one, then the call to adapter.Update either generated an exception or failed to batch the commands, executing each insert individually. (Bug #54386)

  • The method MySql.Data.Common.QueryNormalizer.CollapseValueList generated an ArgumentOutOfRangeException. (Bug #54152, Bug #53865)

  • MySQL Connector/NET did not process Thread.Abort() correctly, and failed to cancel queries currently running on the server. (Bug #54012)

  • Garbage Collector disposal of a MySqlConnection object caused the following exception:

    System.IO.EndOfStreamException: Attempted to read past the end of the stream.
    MySql.Data.MySqlClient.MySqlStream.ReadFully(Stream stream, Byte[] buffer, Int32 offset,
    Int32 count)
    Outer Exception Reading from the stream has failed.

    (Bug #53457)

  • MySQL Connector/NET did not throw an EndOfStreamException exception when net_write_timeout was exceeded. (Bug #53439)

  • After a timeout exception, if an attempt was made to reuse a connection returned to the connection pool the following exception was generated:

    [MySqlException (0x80004005): There is already an open DataReader associated with this
    Connection which must be closed first.]
       MySql.Data.MySqlClient.MySqlCommand.CheckState() +278
       MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior) +43
       MySql.Data.MySqlClient.MySqlCommand.ExecuteReader() +6
       Controls.SimpleCommand.ExecuteReader(String SQL) in ...:323
       Albums.GetImagesByAlbum(SimpleCommand Cmd, Int32 iAlbum, String Order, String Limit)
    in ...:13
       Forecast.Page_Load(Object sender, EventArgs e) in ...:70
       System.Web.UI.Control.OnLoad(EventArgs e) +99
       System.Web.UI.Control.LoadRecursive() +50
       System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean
    includeStagesAfterAsyncPoint) +627

    (Bug #53357)

  • Membership schema creation failed if the default schema collation was not Latin1. (Bug #53174)

  • In MySQL Connector/NET, the MySqlConnection.Abort() method contained a try...catch construct, with an empty catch block. This meant that any exception generated at this point would not be caught. (Bug #52769)

  • EventLog was not disposed in the SessionState provider. (Bug #52550)

  • The procedure cache affected the MySQL Connector/NET performance, reducing it by around 65%. This was due to unnecessary calls of String.Format(), related to debug logging. Even though the logging was disabled the string was still being formatted, resulting in impaired performance. (Bug #52475)

  • If FunctionsReturnString=true was used in the connection string, the decimal separator (according to locale) was not interpreted. (Bug #52187)

  • Periodically the session provider threw an SqlNullValueException exception. When this happened, the row within the my_aspnet_Sessions table had locked always set to '1'. The locked status never changed back to '0' and the user experienced the exception on every page, until their browser was closed and reopened (recreating a new sessionID), or the locked value was manually changed to '0'. (Bug #52175)

  • CHAR(36) columns were not recognized as GUIDs when used in views with entity models. (Bug #52085)

  • In MySQL Connector/NET, the LoadCharsetMap() function of the CharSetMap class set the following incorrect mapping:

    mapping.Add("latin1", new CharacterSet("latin1", 1));

    This meant that, for example, the Euro sign was not handled correctly.

    The correct mapping should have been:

    mapping.Add("latin1", new CharacterSet("windows-1252", 1));

    This is because the MySQL latin1 character set is the same as the windows-cp1252 character set and it extends the official ISO 8859-1 or IANA latin1. (Bug #51927)

  • Stored procedure enumeration code generated an error if a procedure was used in a dataset that did not return any resultsets. (Bug #50671)

  • When an application was subjected to increased concurrent load, MySQL Connector/NET generated the following error when calling stored procedures:

    A DataTable named \'Procedure Parameters\'
    already belongs to this DataSet.

    (Bug #49118)

  • In the ADO.NET Entity Data Model Wizard, the time to update a model scaled abnormally as the number of entities increased. (Bug #48791, Bug #12596237)

  • The INSERT command was significantly slower with MySQL Connector/NET 6.x compared to 5.x, when compression was enabled. (Bug #48243)

  • When the connection string option Connection Reset = True was used, a connection reset used the previously used encoding for the subsequent authentication operation. This failed, for example, if UCS2 was used to read the last column before the reset. (Bug #47153)

  • Opening a connection in the Visual Studio Server Explorer and choosing to alter an existing routine required another authentication at the server. (Bug #44715)

  • When batching was used in MySqlDataAdapter, a connection was not opened automatically in MySqlDataAdapter.Update(). This resulted in an InvalidOperationException exception being generated, with the message text connection must be valid and open.

    MySQL Connector/NET has been changed to behave more like SQL Server: if the connection is closed, it is opened for the duration of update operation. (Bug #38411)

  • Database name was emitted into typed datasets. This prevented users using the configured default database. (Bug #33870)