diff Source/Data/DataException.cs @ 0:f990fcb411a9

Копия текущей версии из github
author cin
date Thu, 27 Mar 2014 21:46:09 +0400
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Source/Data/DataException.cs	Thu Mar 27 21:46:09 2014 +0400
@@ -0,0 +1,135 @@
+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)
+		{
+			var 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
+			{
+				var innerException = InnerException as DataException;
+				if (innerException != null)
+					return innerException.Number;
+				if (_dbManager == null) return null;
+				return _dbManager.DataProvider.Convert(InnerException, ConvertType.ExceptionToErrorNumber) as int?;
+			}
+		}
+
+		public DataExceptionType DataExceptionType
+		{
+			get
+			{
+				if (_dbManager == null || Number == null) 
+					return DataExceptionType.Undefined;
+				return _dbManager.DataProvider.ConvertErrorNumberToDataExceptionType(Number.Value);
+			}
+		}
+
+		#endregion
+	}
+}
+