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;
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
public DataTable ProcedureSelect(string procedureName, List
{
//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
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
Publicar un comentario