Business Logic Toolkit for .NET
www.bltoolkit.net
|  Home   |  Download   |  Documentation   |  Discussions   |  License   |

  Source.Data.DataException.cs

 
using System;
using System.Runtime.Serialization;

using BLToolkit.Data.DataProvider;

namespace BLToolkit.Data
{
    /// <summary>
    /// Defines the base class for the namespace exceptions.
    /// </summary>
    /// <remarks>
    /// This class is the base class for exceptions that may occur during
    /// execution of the namespace members.
    /// </remarks>
    [Serializable] 
    public class DataException : System.Data.DataException
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="DataException"/> class.
        /// </summary>
        /// <remarks>
        /// This constructor initializes the <see cref="Exception.Message"/>
        /// property of the new instance
        /// to a system-supplied message that describes the error,
        /// such as "BLToolkit Data error has occurred."
        /// </remarks>
        public DataException()
            : base("A BLToolkit Data error has occurred.")
        {
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="DataException"/> class
        /// with the specified error message.
        /// </summary>
        /// <param name="message">The message to display to the client when the
        /// exception is thrown.</param>
        /// <seealso cref="Exception.Message"/>
        public DataException(string message)
            : base(message) 
        {
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="DataException"/> class
        /// with the specified error message and InnerException property.
        /// </summary>
        /// <param name="message">The message to display to the client when the
        /// exception is thrown.</param>
        /// <param name="innerException">The InnerException, if any, that threw
        /// the current exception.</param>
        /// <seealso cref="Exception.Message"/>
        /// <seealso cref="Exception.InnerException"/>
        public DataException(string message, Exception innerException)
            : base(message, innerException)
        {
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="DataException"/> class
        /// with the InnerException property.
        /// </summary>
        /// <param name="innerException">The InnerException, if any, that threw
        /// the current exception.</param>
        /// <seealso cref="Exception.InnerException"/>
        public DataException(Exception innerException)
            : base(innerException.Message, innerException)
        {
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="DataException"/> class
        /// with serialized data.
        /// </summary>
        /// <param name="info">The object that holds the serialized object data.</param>
        /// <param name="context">The contextual information about the source or
        /// destination.</param>
        /// <remarks>This constructor is called during deserialization to
        /// reconstitute the exception object transmitted over a stream.</remarks>
        protected DataException(SerializationInfo info, StreamingContext context)
            : base(info, context)
        {
        }

        #region Internal

        private readonly DbManager _dbManager;

        static string GetMessage(DbManager dbManager, Exception innerException)
        {
            object obj = dbManager.DataProvider.Convert(
                innerException, ConvertType.ExceptionToErrorMessage);

            return obj is Exception ? ((Exception)obj).Message : obj.ToString();
        }

        internal DataException(DbManager dbManager, Exception innerException)
            : this(GetMessage(dbManager, innerException), innerException)
        {
            _dbManager = dbManager;
        }

        #endregion

        #region Public Properties

        /// <summary>
        /// Gets a number that identifies the type of error.
        /// </summary>
        public int? Number
        {
            get
            {
                return (int?)(_dbManager == null? null:
                    _dbManager.DataProvider.Convert(
                        InnerException, ConvertType.ExceptionToErrorNumber));
            }
        }

        #endregion
    }
}
 
© 2010 www.bltoolkit.net
support@bltoolkit.net