Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: Guillito en 22 Julio 2015, 06:11 am



Título: No se han especificado valores para algunos de los parámetros requeridos.
Publicado por: Guillito en 22 Julio 2015, 06:11 am
Hola, como les va? disculpe que los moleste, me comunico para comentarles que tengo el siguiente problema:

 Debo llenar una GridCargaNota y me da el error "No se han especificado valores para algunos de los parámetros requeridos."

 Si logran determinar cual seria la falla, les agradecería el aporte de la solución.

 Saludos, disculpen, nos vemos.....

 
Código
  1. protected void ButtonAceptar_Click(object sender, EventArgs e)
  2. {
  3. AccesoLogicaCargaNotas b = new AccesoLogicaCargaNotas();
  4. string cadenaConexion = WebConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
  5. using (OleDbConnection cnn = new OleDbConnection(cadenaConexion))
  6. {
  7. cnn.Open();
  8. string query1 = string.Empty;
  9. query1 = "SELECT id_cursoMateria From CursosMaterias cm Where cm.id_Curso = @idCurso AND cm.id_Materia = @idMateria";
  10. OleDbCommand com1 = new OleDbCommand(query1, cnn);
  11.  
  12. ViewState["idCursoMateria"] = com1;
  13.  
  14. string query2 = string.Empty;
  15. query2 = "SELECT Id_Nota, Nota, [Fecha Trimestre], Tipo, Etapa, Dni, Nombre, Apellido, id_alumMatCurso From Notas N Where N.id_alumMatCurso = @idCurMater";
  16. OleDbCommand com2 = new OleDbCommand(query2, cnn);
  17.  
  18. com1.Parameters.AddWithValue("@idCurso", Convert.ToInt32(ViewState["idCurso"]));
  19. com1.Parameters.AddWithValue("@idMateria", Convert.ToInt32(ViewState["idMateria"]));
  20. com2.Parameters.AddWithValue("@idCurMater", Convert.ToInt32(ViewState["idCursoMateria"]));
  21. com1.ExecuteNonQuery();
  22. com2.ExecuteNonQuery();
  23. }
  24.  


Título: Re: No se han especificado valores para algunos de los parámetros requeridos.
Publicado por: fran800m en 22 Julio 2015, 19:00 pm
¿En qué línea te da la excepción?


Título: Re: No se han especificado valores para algunos de los parámetros requeridos.
Publicado por: DarK_FirefoX en 22 Julio 2015, 20:04 pm
¿En qué línea te da la excepción?

^^ Repito la misma pregunta!

Ahora, este tipo de error:

Citar
No se han especificado valores para algunos de los parámetros requeridos

Mod: Puede darte por no especificar los suficientes parámetros a la hora de llamar a un método, instanciar una objeto (usando un constructor que recibe parámetros).

O sea, si un método o constructor esta definido para recibir n (n>0) parámetros y tu lo llamas utilizando n-m (sea 0<=m<n) parámetros, entonces te puede dar esa excepción.


Lo que dijo @Eleкtro

Salu2s


Título: Re: No se han especificado valores para algunos de los parámetros requeridos.
Publicado por: Eleкtro en 22 Julio 2015, 21:39 pm
este tipo de error:

Puede darte por no especificar los suficientes parámetros a la hora de llamar a un método, instanciar una objeto (usando un constructor que recibe parámetros).

O sea, si un método o constructor esta definido para recibir n (n>0) parámetros y tu lo llamas utilizando n-m (sea 0<=m<n) parámetros, entonces te puede dar esa excepción.

PD: No solo en estos casos, pero es lo que veo que haces en tu código.

No, eso no es así.

El error proviene de la consulta parametizada, no de un método/función/constructor que reciba parámetros, el mensaje de error en esa situación sería muy distinto, además, ese tipo de error no dejaría compilar el código, es decir, sería un error de compilador y la sintaxis quedaría resaltada en la IDE, por ende, se podría localizar el conflicto en seguida.

Este es un error en tiempo de ejecución, lanzado por el método com1.ExecuteNonQuery() o com2.ExecuteNonQuery() (o tal vez ambos), y el tipo de excepción que tiene es esta:
OleDbException (http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbexception%28v=vs.110%29.aspx) con mensaje de error:
Código:
No Value Given For One Or More Required Parameters

En resumen, el error está en la consulta, ya sea query1 o query2 o ambas, en la forma de construirla o en la forma de añadir los parámetros, pero no manejo SQL así que no puedo aportar más.

En la query1 estás preguntando por 2 parámetros, y estás asignando a ambos el valor, en la query2 estás preguntando por 1 parámetro, y también lo estás asignando, es decir, todo parece correcto, pero como ya digo no manejo SQL y obviamente existe algún conflicto si no te funciona.

Saludos!


Título: Re: No se han especificado valores para algunos de los parámetros requeridos.
Publicado por: DarK_FirefoX en 23 Julio 2015, 01:06 am
No, eso no es así.

El error proviene de la consulta parametizada, no de un método/función/constructor que reciba parámetros, el mensaje de error en esa situación sería muy distinto, además, ese tipo de error no dejaría compilar el código, es decir, sería un error de compilador y la sintaxis quedaría resaltada en la IDE, por ende, se podría localizar el conflicto en seguida.

Este es un error en tiempo de ejecución, lanzado por el método com1.ExecuteNonQuery() o com2.ExecuteNonQuery() (o tal vez ambos), y el tipo de excepción que tiene es esta:
OleDbException (http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbexception%28v=vs.110%29.aspx) con mensaje de error:
Código:
No Value Given For One Or More Required Parameters

En resumen, el error está en la consulta, ya sea query1 o query2 o ambas, en la forma de construirla o en la forma de añadir los parámetros, pero no manejo SQL así que no puedo aportar más.

En la query1 estás preguntando por 2 parámetros, y estás asignando a ambos el valor, en la query2 estás preguntando por 1 parámetro, y también lo estás asignando, es decir, todo parece correcto, pero como ya digo no manejo SQL y obviamente existe algún conflicto si no te funciona.

Saludos!

Tienes toda la razón, realmente es un error en tiempo de compilación, de hecho el intellisense te muestra "el gusarapo" como le digo yo   ;)

Y el error que te da se lee:

Citar
No overload for method 'MethodName' takes X arguments;

o en caso de un constructor:

Citar
Namespace.ClassName does not contain a constructor that takes X arguments

Lamento haber cometido el error, realmente no tuve tiempo de mirar la OleDbException.

Ahora, esperemos que @Guillito, nos diga en que linea es que le salta la excepción.

Mod:

@Guillito, ¿Cuales son los nombres de la tabla a la cual le haces la "query2"?

Código
  1. query2 = "SELECT Id_Nota, Nota, [Fecha Trimestre], Tipo, Etapa, Dni, Nombre, Apellido, id_alumMatCurso From Notas N Where N.id_alumMatCurso = @idCurMater";

Quizás estoy un poco oxidado en SQL Queries, pero no me suena el hecho de usar [Fecha Trimestre] así, ¿Por qué lo usas así? ¿Como se llama esa columna de la tabla?

Además, sigo viendo como utilizas un alias en las query para las tablas.

Citar
SELECT id_cursoMateria From CursosMaterias cm Where cm.id_Curso = @idCurso AND cm.id_Materia = @idMateria

Citar
SELECT Id_Nota, Nota, [Fecha Trimestre], Tipo, Etapa, Dni, Nombre, Apellido, id_alumMatCurso From Notas N Where N.id_alumMatCurso = @idCurMater

Si mi oxidado conocimiento de SQL no me falla, creo que para usar alias para una columna o tabla debes usar "as"

O sea, algo así como:

Citar
SELECT id_cursoMateria From CursosMaterias AS cm Where cm.id_Curso = @idCurso AND cm.id_Materia = @idMateria

Citar
SELECT Id_Nota, Nota, [Fecha Trimestre], Tipo, Etapa, Dni, Nombre, Apellido, id_alumMatCurso From Notas AS N Where N.id_alumMatCurso = @idCurMater

Espero haber sido de ayuda. Esperamos tu respuesta.

Salu2s