protected override bool ExecuteStoredProcedure(string procedureName, bool bindbyName, ICollection parameterCollection, List <DBParameter> dBParameter) { lock (locker) { bool is_success = false; ErrorMessage = string.Empty; DbCommand = DbConnection.CreateCommand(); DbCommand.CommandText = procedureName; DbCommand.CommandType = CommandType.StoredProcedure; DbCommand.BindByName = bindbyName; //DbCommand.AddRowid = true; if (CheckConnection(DbConnection, DbCommand, testString)) { try { var parameters = (List <OracleParameter>)parameterCollection; DbCommand.Parameters.AddRange(parameters.ToArray()); DbCommand.ExecuteNonQuery(); is_success = true; var directionFilter = new ParameterDirection[] { ParameterDirection.Output, ParameterDirection.InputOutput, ParameterDirection.ReturnValue }; foreach (OracleParameter OPara in DbCommand.Parameters) { if (directionFilter.Contains(OPara.Direction)) { var parameter = dBParameter.FirstOrDefault(r => r.Name == OPara.ParameterName && r.ParameterDirection == OPara.Direction); if (parameter != null) { if (OPara.OracleDbType == OracleDbType.RefCursor) { adapter = new OracleDataAdapter(DbCommand); DataTable dt = new DataTable("Result"); adapter.Fill(dt, (OracleRefCursor)OPara.Value); parameter.Value = dt; } else if (OPara.OracleDbType == OracleDbType.Clob) { var clob = (OracleClob)OPara.Value; var reader = new StreamReader(clob, Encoding.Unicode); char[] buffer = new char[parameter.Size]; int actual = 0; while ((actual = reader.Read(buffer, 0, buffer.Length)) > 0) { parameter.Value = new string(buffer, 0, actual); } } else { parameter.Value = OPara.Value; } } } } //foreach (DBParameter Parameter in dBParameter) //{ // if (Parameter.ParameterDirection == ParameterDirection.Output) // { // foreach (OracleParameter OPara in DbCommand.Parameters) // { // if (OPara.Direction == ParameterDirection.Output && OPara.ParameterName == Parameter.Name) // { // if (OPara.OracleDbType == OracleDbType.RefCursor) // { // adapter = new OracleDataAdapter(DbCommand); // DataTable dt = new DataTable("Result"); // adapter.Fill(dt, (OracleRefCursor)OPara.Value); // Parameter.Value = dt; // } // else if (OPara.OracleDbType == OracleDbType.Clob) // { // var clob = (OracleClob)OPara.Value; // var reader = new StreamReader(clob, Encoding.Unicode); // char[] buffer = new char[OPara.Size]; // int actual = 0; // while ((actual = reader.Read(buffer, 0, buffer.Length)) > 0) // Parameter.Value = new string(buffer, 0, actual); // } // else // Parameter.Value = OPara.Value; // break; // } // } // } // if (Parameter.ParameterDirection == ParameterDirection.InputOutput) // { // foreach (OracleParameter OPara in DbCommand.Parameters) // { // if (OPara.Direction == ParameterDirection.InputOutput) // { // if (OPara.ParameterName == Parameter.Name) // { // if (OPara.OracleDbType == OracleDbType.RefCursor) // { // adapter = new OracleDataAdapter(DbCommand); // DataTable dt = new DataTable("Result"); // adapter.Fill(dt, (OracleRefCursor)OPara.Value); // Parameter.Value = dt; // } // else if (OPara.OracleDbType == OracleDbType.Clob) // { // var clob = (OracleClob)OPara.Value; // var reader = new StreamReader(clob, Encoding.Unicode); // char[] buffer = new char[OPara.Size]; // int actual = 0; // while ((actual = reader.Read(buffer, 0, buffer.Length)) > 0) // Parameter.Value = new string(buffer, 0, actual); // } // else // Parameter.Value = OPara.Value; // } // } // } // } // if (Parameter.ParameterDirection == ParameterDirection.ReturnValue) // { // foreach (OracleParameter OPara in DbCommand.Parameters) // { // if (OPara.Direction == ParameterDirection.ReturnValue) // { // if (OPara.ParameterName == Parameter.Name) // { // if (OPara.OracleDbType == OracleDbType.RefCursor) // { // adapter = new OracleDataAdapter(DbCommand); // DataTable dt = new DataTable("Result"); // adapter.Fill(dt, (OracleRefCursor)OPara.Value); // Parameter.Value = dt; // } // else if (OPara.OracleDbType == OracleDbType.Clob) // { // var clob = (OracleClob)OPara.Value; // var reader = new StreamReader(clob, Encoding.Unicode); // char[] buffer = new char[OPara.Size]; // int actual = 0; // while ((actual = reader.Read(buffer, 0, buffer.Length)) > 0) // Parameter.Value = new string(buffer, 0, actual); // } // else // Parameter.Value = OPara.Value; // } // } // } // } //} } catch (Exception exception) { is_success = false; ErrorMessage = exception.ToString(); } } CloseConnection(); return(is_success); } }