Bug #27436 Add the MySqlException.Number property value to the Exception.Data Dictionary
Submitted: 26 Mar 2007 10:06 Modified: 13 Nov 2007 11:46
Reporter: Please Remove Email Updates:
Status: Closed Impact on me:
None 
Category:Connector / NET Severity:S4 (Feature request)
Version:5.0.6 OS:Microsoft Windows (Windows)
Assigned to: CPU Architecture:Any

[26 Mar 2007 10:06] Please Remove
Description:
The error code returned by MySql should be added to the Exception.Data dictionary. This is useful when using the DbProviderFactory, because it's not possible to retrieve the error code from DbException. 

How to repeat:
.

Suggested fix:
// Copyright (C) 2004-2007 MySQL AB
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License version 2 as published by
// the Free Software Foundation
//
// There are special exceptions to the terms and conditions of the GPL 
// as it is applied to this software. View the full text of the 
// exception in file EXCEPTIONS in the directory of this software 
// distribution.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 

using System;
using System.Runtime.Serialization;
using System.Data.Common;
using System.Globalization;

namespace MySql.Data.MySqlClient
{
	/// <summary>
	/// The exception that is thrown when MySQL returns an error. This class cannot be inherited.
	/// </summary>
	/// <include file='docs/MySqlException.xml' path='MyDocs/MyMembers[@name="Class"]/*'/>
#if !PocketPC
	[Serializable]
#endif
	public sealed class MySqlException : DbException
	{
		private int errorCode;
		private bool isFatal;

		internal MySqlException() 
		{
		}

		internal MySqlException(string msg) : base(msg)
		{
		}

		internal MySqlException(string msg, Exception ex) : base(msg, ex)
		{
		}

		internal MySqlException(string msg, bool isFatal, Exception inner) : base (msg, inner)
		{
			this.isFatal = isFatal;
		}

        internal MySqlException(string msg, int errno, Exception inner)
            : this(msg, inner)
        {
            errorCode = errno;
            Data.Add("ErrorCode", errno.ToString(CultureInfo.InvariantCulture));
        }

		internal MySqlException(string msg, int errno) : this(msg)
		{
			errorCode = errno;
            Data.Add("ErrorCode", errno.ToString(CultureInfo.InvariantCulture));
		}

#if !PocketPC
		private MySqlException(SerializationInfo info, StreamingContext context) : base(info, context)
		{
		}
#endif

		/// <summary>
		/// Gets a number that identifies the type of error.
		/// </summary>
		public int Number 
		{
			get { return errorCode; } 
		}

		/// <summary>
		/// True if this exception was fatal and cause the closing of the connection, false otherwise.
		/// </summary>
		internal bool IsFatal 
		{
			get { return isFatal; }
		}
	}
}

The constructors should maybe be refactored to avoid the duplicate code.
[23 May 2007 20:03] Please Remove
Has anybody looked at this?
[11 Jul 2007 11:04] Please Remove
Anyone?
[5 Nov 2007 21:01] 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/37142
[5 Nov 2007 21:01] 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/37143
[5 Nov 2007 21:03] Reggie Burnett
Implemented in 5.0.9 and 5.1.4
[13 Nov 2007 11:46] MC Brown
A note has been added to the 5.0.9 and 5.1.4 changelogs:

The server error code was not updated in the Data[] hash, which prevented DbProviderFactory users from accessing the server error code.