MySql.Data.MySqlClient.ISSchemaProvider.GetProcedureParameters C# (CSharp) Method

GetProcedureParameters() public method

Return schema information about parameters for procedures and functions Restrictions supported are: schema, name, type, parameter name
public GetProcedureParameters ( string restrictions, DataTable routines ) : DataTable
restrictions string
routines System.Data.DataTable
return System.Data.DataTable
        public virtual DataTable GetProcedureParameters(string[] restrictions,
            DataTable routines)
        {
            if (connection.driver.Version.isAtLeast(6, 0, 6))
                return GetParametersFromIS(restrictions, routines);
            try
            {
                DataTable dt = CreateParametersTable();
                GetParametersFromShowCreate(dt, restrictions, routines);
                return dt;
            }
            catch (InvalidOperationException ioe)
            {
                throw new InvalidOperationException(Resources.UnableToRetrieveParameters, ioe);
            }
        }

Usage Example

Example #1
0
        private DataSet GetParameters(string procName)
        {
            // if we can use mysql.proc, then do so
            if (Connection.Settings.UseProcedureBodies)
                return Connection.ProcedureCache.GetProcedure(Connection, procName);

            // we can't use mysql.proc so we attempt to "make do"
            DataSet ds = new DataSet();
            string[] restrictions = new string[4];
            int dotIndex = procName.IndexOf('.');
            restrictions[1] = procName.Substring(0, dotIndex++);
            restrictions[2] = procName.Substring(dotIndex, procName.Length - dotIndex);
            ds.Tables.Add(Connection.GetSchema("procedures", restrictions));

            // we use an internal method to create our procedure parameters table.  We pass
            // in a non-null routines table and this will prevent the code from attempting
            // a show create. It will process zero routine records but will return an empty
            // parameters table we can then fill.
            DataTable zeroRoutines = new DataTable();
            ISSchemaProvider sp = new ISSchemaProvider(Connection);
            DataTable pTable = sp.GetProcedureParameters(null, zeroRoutines);
            pTable.TableName = "procedure parameters";
            ds.Tables.Add(pTable);

            // now we run through the parameters that were set and fill in the parameters table
            // the best we can
            int pos = 1;
            foreach (MySqlParameter p in command.Parameters)
            {
                // in this mode, all parameters must have their type set
                if (!p.TypeHasBeenSet)
                    throw new InvalidOperationException(Resources.NoBodiesAndTypeNotSet);

                DataRow row = pTable.NewRow();
                row["PARAMETER_NAME"] = p.ParameterName;
                row["PARAMETER_MODE"] = "IN";
                if (p.Direction == ParameterDirection.InputOutput)
                    row["PARAMETER_MODE"] = "INOUT";
                else if (p.Direction == ParameterDirection.Output)
                    row["PARAMETER_MODE"] = "OUT";
                else if (p.Direction == ParameterDirection.ReturnValue)
                {
                    row["PARAMETER_MODE"] = "OUT";
                    row["ORDINAL_POSITION"] = 0;
                }
                else
                    row["ORDINAL_POSITION"] = pos++;
                pTable.Rows.Add(row);
            }
            return ds;
        }
All Usage Examples Of MySql.Data.MySqlClient.ISSchemaProvider::GetProcedureParameters