Bug #27436 Add the MySqlException.Number property value to the Exception.Data Dictionary
Submitted: 26 Mar 2007 12:06 Modified: 13 Nov 2007 12:46
Reporter: Dennis Gronewold
Status: Closed
Category:Connector/Net Severity:S4 (Feature request)
Version:5.0.6 OS:Microsoft Windows (Windows)
Assigned to: Target Version:
Triage: D5 (Feature request)

[26 Mar 2007 12:06] Dennis Gronewold
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 22:03] Dennis Gronewold
Has anybody looked at this?
[11 Jul 2007 13:04] Dennis Gronewold
Anyone?
[5 Nov 2007 22: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 22: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 22:03] Reggie Burnett
Implemented in 5.0.9 and 5.1.4
[13 Nov 2007 12: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.