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

Pregunta
-
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.....
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(); }
Respuestas
-
hola
una duda, porque ejecutas instrucciones SELECT con el ExecuteNonQuery() ?
eso no tiene sentido, deberias realizar un Fill() de un datatable o sino usar un ExecuteReader() para poder recorrer los valores que retornan las consultas
-------
no evaluaste usar un INNER JOIN para unir esas dos queries en una sola ?
using (OleDbConnection cnn = new OleDbConnection(cadenaConexion)) { cnn.Open(); string query = @"SELECT N.Id_Nota, N.Nota, N.[Fecha Trimestre], N.Tipo, N.Etapa, N.Dni, N.Nombre, N.Apellido From Notas N INNER JOIN CursosMaterias CM ON N.id_alumMatCurso = CM.id_cursoMateria Where CM.id_Curso = @idCurso AND CM.id_Materia = @idMateria"; OleDbCommand com = new OleDbCommand(query, cnn); com.Parameters.AddWithValue("@idCurso", Convert.ToInt32(ViewState["idCurso"])); com.Parameters.AddWithValue("@idMateria", Convert.ToInt32(ViewState["idMateria"])); OleDbDataAdapter da = new OleDbDataAdapter(com); DataTable dt = new DataTable(); da.Fill(dt); //resto codigo }
saludos
Leandro Tuttini
Blog
MVP Profile
Buenos Aires
Argentina- Editado Leandro TuttiniMVP miércoles, 22 de julio de 2015 11:57
- Propuesto como respuesta Karen MalagónModerator miércoles, 22 de julio de 2015 19:36
- Marcado como respuesta Karen MalagónModerator jueves, 23 de julio de 2015 17:32
Todas las respuestas
-
Al utilizar OleDb deberías utilizar en las sentencias marcadores de posición en lugar de parámetros con nombre:
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 = ? AND cm.id_Materia = ?"; 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 = ?"; 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(); }
Píldoras .NET
Artículos, tutoriales y ejemplos de código .NETPíldoras JS
Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...- Propuesto como respuesta Karen MalagónModerator miércoles, 22 de julio de 2015 19:36
-
Y aparte de eso, una vez corregido el anterior problema, tu código fallará a causa de esta instrucción:
ViewState["idCursoMateria"] = com1;
El OleDbCommand no es serializable, por lo que no se puede guardar en el ViewState.
E incuso aunque eso funcionase, fallaría también al hacer esto:
Convert.ToInt32(ViewState["idCursoMateria"]));
Debido a que un OleDbCommand no se puede convertir a un Int32.
- Propuesto como respuesta Karen MalagónModerator miércoles, 22 de julio de 2015 19:36
-
hola
una duda, porque ejecutas instrucciones SELECT con el ExecuteNonQuery() ?
eso no tiene sentido, deberias realizar un Fill() de un datatable o sino usar un ExecuteReader() para poder recorrer los valores que retornan las consultas
-------
no evaluaste usar un INNER JOIN para unir esas dos queries en una sola ?
using (OleDbConnection cnn = new OleDbConnection(cadenaConexion)) { cnn.Open(); string query = @"SELECT N.Id_Nota, N.Nota, N.[Fecha Trimestre], N.Tipo, N.Etapa, N.Dni, N.Nombre, N.Apellido From Notas N INNER JOIN CursosMaterias CM ON N.id_alumMatCurso = CM.id_cursoMateria Where CM.id_Curso = @idCurso AND CM.id_Materia = @idMateria"; OleDbCommand com = new OleDbCommand(query, cnn); com.Parameters.AddWithValue("@idCurso", Convert.ToInt32(ViewState["idCurso"])); com.Parameters.AddWithValue("@idMateria", Convert.ToInt32(ViewState["idMateria"])); OleDbDataAdapter da = new OleDbDataAdapter(com); DataTable dt = new DataTable(); da.Fill(dt); //resto codigo }
saludos
Leandro Tuttini
Blog
MVP Profile
Buenos Aires
Argentina- Editado Leandro TuttiniMVP miércoles, 22 de julio de 2015 11:57
- Propuesto como respuesta Karen MalagónModerator miércoles, 22 de julio de 2015 19:36
- Marcado como respuesta Karen MalagónModerator jueves, 23 de julio de 2015 17:32