Mercurial > pub > bltoolkit
diff Source/Data/DataProvider/OracleDataProvider.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/DataProvider/OracleDataProvider.cs Thu Mar 27 21:46:09 2014 +0400 @@ -0,0 +1,147 @@ +using System; +using System.Data; +using System.Data.Common; +using System.Data.OracleClient; +using System.Globalization; + +namespace BLToolkit.Data.DataProvider +{ + using Sql.SqlProvider; + +#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.NameToCommandParameter: + case ConvertType.NameToSprocParameter: + return ParameterPrefix == null? value: ParameterPrefix + value; + + case ConvertType.SprocParameterToName: + var 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 SqlProvider.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(); + } + } + +#if FW4 +#pragma warning restore 0618 +#endif +}