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

  Source.Data.DataProvider.OracleDataProvider.cs

 
using System;
using System.Data;
using System.Data.Common;
using System.Data.OracleClient;
using System.Globalization;
using BLToolkit.Data.Sql.SqlProvider;

namespace BLToolkit.Data.DataProvider
{
#if FW4
    [Obsolete("OracleDataProvider has been deprecated. http://go.microsoft.com/fwlink/?LinkID=144260")]
#pragma warning disable 0618
#endif
    /// <summary>
    /// Implements access to the Data Provider for Oracle.
    /// </summary>
    /// <remarks>
    /// See the <see cref="DbManager.AddDataProvider(DataProviderBase)"/> method to find an example.
    /// </remarks>
    /// <seealso cref="DbManager.AddDataProvider(DataProviderBase)">AddDataManager Method</seealso>
    public sealed class OracleDataProvider : DataProviderBase
    {
        private string _parameterPrefix = "P";
        public  string  ParameterPrefix
        {
            get { return _parameterPrefix; }
            set
            {
                _parameterPrefix = string.IsNullOrEmpty(value)? null:
                    value.ToUpper(CultureInfo.InvariantCulture);
            }
        }

        /// <summary>
        /// Creates the database connection object.
        /// </summary>
        /// <remarks>
        /// See the <see cref="DbManager.AddDataProvider(DataProviderBase)"/> method to find an example.
        /// </remarks>
        /// <seealso cref="DbManager.AddDataProvider(DataProviderBase)">AddDataManager Method</seealso>
        /// <returns>The database connection object.</returns>
        public override IDbConnection CreateConnectionObject()
        {
            return new OracleConnection();
        }

        /// <summary>
        /// Creates the data adapter object.
        /// </summary>
        /// <remarks>
        /// See the <see cref="DbManager.AddDataProvider(DataProviderBase)"/> method to find an example.
        /// </remarks>
        /// <seealso cref="DbManager.AddDataProvider(DataProviderBase)">AddDataManager Method</seealso>
        /// <returns>A data adapter object.</returns>
        public override DbDataAdapter CreateDataAdapterObject()
        {
            return new OracleDataAdapter();
        }

        /// <summary>
        /// Populates the specified <see cref="IDbCommand"/> object's Parameters collection with 
        /// parameter information for the stored procedure specified in the <see cref="IDbCommand"/>.
        /// </summary>
        /// <remarks>
        /// See the <see cref="DbManager.AddDataProvider(DataProviderBase)"/> method to find an example.
        /// </remarks>
        /// <seealso cref="DbManager.AddDataProvider(DataProviderBase)">AddDataManager Method</seealso>
        /// <param name="command">The <see cref="IDbCommand"/> referencing the stored procedure for which the parameter information is to be derived. The derived parameters will be populated into the Parameters of this command.</param>
        public override bool DeriveParameters(IDbCommand command)
        {
            OracleCommandBuilder.DeriveParameters((OracleCommand)command);
            return true;
        }

        public override object Convert(object value, ConvertType convertType)
        {
            switch (convertType)
            {
                case ConvertType.NameToQueryParameter:
                    return ":" + value;

                case ConvertType.NameToCommandParameter:
                case ConvertType.NameToSprocParameter:
                    return ParameterPrefix == null? value: ParameterPrefix + value;

                case ConvertType.SprocParameterToName:
                    string name = (string)value;

                    if (name.Length > 0)
                    {
                        if (name[0] == ':')
                            return name.Substring(1);

                        if (ParameterPrefix != null &&
                            name.ToUpper(CultureInfo.InvariantCulture).StartsWith(ParameterPrefix))
                        {
                            return name.Substring(ParameterPrefix.Length);
                        }
                    }

                    break;

                case ConvertType.ExceptionToErrorNumber:
                    if (value is OracleException)
                        return ((OracleException)value).Code;
                    break;
            }

            return base.Convert(value, convertType);
        }

        /// <summary>
        /// Returns connection type.
        /// </summary>
        /// <remarks>
        /// See the <see cref="DbManager.AddDataProvider(DataProviderBase)"/> method to find an example.
        /// </remarks>
        /// <seealso cref="DbManager.AddDataProvider(DataProviderBase)">AddDataManager Method</seealso>
        /// <value>An instance of the <see cref="Type"/> class.</value>
        public override Type ConnectionType
        {
            get { return typeof(OracleConnection); }
        }

        public const string NameString = "Oracle";

        /// <summary>
        /// Returns the data provider name.
        /// </summary>
        /// <remarks>
        /// See the <see cref="DbManager.AddDataProvider(DataProviderBase)"/> method to find an example.
        /// </remarks>
        /// <seealso cref="DbManager.AddDataProvider(DataProviderBase)">AddDataProvider Method</seealso>
        /// <value>Data provider name.</value>
        public override string Name
        {
            get { return NameString; }
        }

        public override ISqlProvider CreateSqlProvider()
        {
            return new OracleSqlProvider(this);
        }
    }
#if FW4
#pragma warning restore 0618
#endif
}
 
© 2010 www.bltoolkit.net
support@bltoolkit.net