Example #1
0
        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);
            }
        }