Enviando parametros a un stored procedure mysql desde asp.net

Estube todo un dia con este tema. No se hasta ahora porque no me funciona el envio de parametros desde c# a mysql.   Es decir funciona en algunas bases de datos mysql y en otras no. Pero por las dudas les paso los 2 casos:


  public DataTable ProcedureSelect(string procedureName, List parameters)
        {
            //Get connection string
            string conConnectionString = ConfigurationManager.ConnectionStrings["ApplicationServices"].ConnectionString;
            MySqlConnection SQLDatabaseConnection = new MySqlConnection(conConnectionString);

            //Perform Command
            MySqlCommand Command = new MySqlCommand();
            Command.Connection = SQLDatabaseConnection;
            Command.CommandType = CommandType.StoredProcedure;

            DataSet dsPageInfo = new DataSet();
            MySqlDataAdapter daPageInfo = new MySqlDataAdapter();

            if (parameters != null)
            {
                Command.Parameters.Clear();

                foreach (DbParameter dbParameter in parameters)
                {

                    Command.Parameters.AddWithValue(dbParameter.Name, dbParameter.Value);
                    Command.Parameters[dbParameter.Name].Direction = (ParameterDirection)dbParameter.Direction;

                    //MySqlParameter parameter = new MySqlParameter();
                    //parameter.ParameterName = dbParameter.Name;
                    //parameter.Direction = (ParameterDirection)dbParameter.Direction;
                    //parameter.Value = dbParameter.Value;
         
                    //Command.Parameters.Add(parameter);
                }
            }
            Command.CommandText = procedureName;
            daPageInfo.SelectCommand = Command;
            SQLDatabaseConnection.Open();
            daPageInfo.Fill(dsPageInfo);
            SQLDatabaseConnection.Close();
            return dsPageInfo.Tables[0];

        }



Es esta parte el problema

 //MySqlParameter parameter = new MySqlParameter();
                    //parameter.ParameterName = dbParameter.Name;
                    //parameter.Direction = (ParameterDirection)dbParameter.Direction;
                    //parameter.Value = dbParameter.Value;
         
                    //Command.Parameters.Add(parameter);
En una bd de mysql funciona.( es decir de mi trabajo anterior)  Ahora con esta bd mysql 5.0.5 no me funcionaba el envio de parametros, ejecutaba pero al parecer no tomaba el valor.
Colocando esto pude solucionar

   Command.Parameters.AddWithValue(dbParameter.Name, dbParameter.Value);
                    Command.Parameters[dbParameter.Name].Direction = ParameterDirection.Input;

El stored procedure es:


CREATE PROCEDURE sil.`cnsDepartamentos`(IN pTipo INT   )
BEGIN

case
when pTipo=1 then    
select Codigo,Descripcion from nivel;
when pTipo=2 then
select Codigo,Descripcion from division;
when pTipo=3 then
select curso.Codigo,Descripcion from curso inner join cursosgrados on curso.CodiGoCursoGrado=cursosgrados.Codigo;
else
select Codigo,Descripcion from division;
end case;

END;


Bueno espero q les ayude porque hasta ahora no se porque pasa esto.
Me sirvio mucho esta pagina
http://forums.asp.net/t/1796878.aspx/1
Saludos
Adalberto

Agrengando unas cosas mas al respecto

Bueno por alguna razon creo que ya descubri por que esta dando error , Yo utilizo esta enum para manejar los ParemeterDirection en mi clase de BD


 public enum DbDirection
    {
        Input,
        InputOutput,
        Output,
        ReturnValue
    };


Y por alguna razon no le esta gustando. Entonces lo que hice fue cambiar mi clase asi


  public class DbParameter
    {
        public string Name { get; set; }
        public ParameterDirection Direction { get; set; }
        public object Value { get; set; }
   
        public DbParameter() { }

        public DbParameter(string parameterName, ParameterDirection parameterDirection, object parameterValue)
        {
            Name = parameterName;
            Direction = parameterDirection;
            Value = parameterValue;
        }
    }

Uso directamente ParameterDirection en vez de mi enum.Que por cierto funcionaba en el otro aplicativo que tenia( solo que en mi otro trabajo como les comente). Bueno eso es todo.
Saludos
Adalberto

Comentarios