using Dapper; using Oracle.ManagedDataAccess.Client; using System.Collections.Generic; using System.Data; using System.Linq; namespace WX.CRM.DataSynApi.Dao { public class OracleDynamicParameters : SqlMapper.IDynamicParameters, SqlMapper.IParameterLookup { private readonly DynamicParameters _dynamicParameters = new DynamicParameters(); private readonly List _oracleParameters = new List(); public object this[string name] { get { var para = _oracleParameters.SingleOrDefault(t => t.ParameterName == name); if (para != null) return para.Value; return null; } } public void Add(string name, object value = null, DbType dbType = DbType.AnsiString, ParameterDirection? direction = null, int? size = null) { _dynamicParameters.Add(name, value, dbType, direction, size); } 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()); } } } }