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

Iniciado por Guillito, 22 Julio 2015, 06:11 AM

0 Miembros y 1 Visitante están viendo este tema.

Guillito

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 (csharp) [Seleccionar]
protected void ButtonAceptar_Click(object sender, EventArgs e)
{
AccesoLogicaCargaNotas b = new AccesoLogicaCargaNotas();
string cadenaConexion = WebConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
using (OleDbConnection cnn = new OleDbConnection(cadenaConexion))
{
cnn.Open();
string query1 = string.Empty;
query1 = "SELECT id_cursoMateria From CursosMaterias cm Where cm.id_Curso = @idCurso AND cm.id_Materia = @idMateria";
OleDbCommand com1 = new OleDbCommand(query1, cnn);

ViewState["idCursoMateria"] = com1;

string query2 = string.Empty;
query2 = "SELECT Id_Nota, Nota, [Fecha Trimestre], Tipo, Etapa, Dni, Nombre, Apellido, id_alumMatCurso From Notas N Where N.id_alumMatCurso = @idCurMater";
OleDbCommand com2 = new OleDbCommand(query2, cnn);

com1.Parameters.AddWithValue("@idCurso", Convert.ToInt32(ViewState["idCurso"]));
com1.Parameters.AddWithValue("@idMateria", Convert.ToInt32(ViewState["idMateria"]));
com2.Parameters.AddWithValue("@idCurMater", Convert.ToInt32(ViewState["idCursoMateria"]));
com1.ExecuteNonQuery();
com2.ExecuteNonQuery();
}


DarK_FirefoX

#2
Cita de: fran800m en 22 Julio 2015, 19:00 PM
¿En qué línea te da la excepción?

^^ Repito la misma pregunta!

Ahora, este tipo de error:

CitarNo 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

Eleкtro

Cita de: DarK_FirefoX en 22 Julio 2015, 20:04 PMeste 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 con mensaje de error:
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!








DarK_FirefoX

#4
Cita de: Eleкtro en 22 Julio 2015, 21:39 PM
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 con mensaje de error:
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:

CitarNo overload for method 'MethodName' takes X arguments;

o en caso de un constructor:

CitarNamespace.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 (csharp) [Seleccionar]
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.

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

CitarSELECT 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:

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

CitarSELECT 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