using Dapper; using Oracle.ManagedDataAccess.Client; using System; using System.Collections.Generic; using System.Data; using System.Linq; namespace NetCore.BLL { public class OracleDynamicParameters { private readonly DynamicParameters _dynamicParameters = new DynamicParameters(); private readonly List _oracleParameters = new List(); public void Add(string name, object value = null, DbType dbType = DbType.AnsiString, ParameterDirection? direction = null, int? size = null) { _dynamicParameters.Add(name, value, dbType, direction); } public void Add(string name, OracleDbType oracleDbType, object value) { var oracleParameter = new OracleParameter(name, oracleDbType) { Value = value }; _oracleParameters.Add(oracleParameter); } public void Add(string name, OracleDbType oracleDbType, ParameterDirection direction) { var oracleParameter = new OracleParameter(name, oracleDbType) { Direction = direction }; _oracleParameters.Add(oracleParameter); } public void Add(string name, OracleDbType oracleDbType, int size, ParameterDirection direction) { var oracleParameter = new OracleParameter(name, oracleDbType, size) { Direction = direction }; _oracleParameters.Add(oracleParameter); } public void AddParameters(IDbCommand command, SqlMapper.Identity identity) { ((SqlMapper.IDynamicParameters)_dynamicParameters).AddParameters(command, identity); var oracleCommand = command as OracleCommand; if (oracleCommand != null) { oracleCommand.Parameters.AddRange(_oracleParameters.ToArray()); } } public T Get(string parameterName) { var parameter = _oracleParameters.SingleOrDefault(t => t.ParameterName == parameterName); if (parameter != null) return (T)Convert.ChangeType(parameter.Value, typeof(T)); return default(T); } public OracleParameter GetOne(string parameterName) { var parameter = _oracleParameters.SingleOrDefault(t => t.ParameterName == parameterName); return parameter; } public T Get(int index) { var parameter = _oracleParameters[index]; if (parameter != null) return (T)Convert.ChangeType(parameter.Value, typeof(T)); return default(T); } } }