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

  • 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();
                }


    miércoles, 22 de julio de 2015 3:53

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


    miércoles, 22 de julio de 2015 11:56

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 .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    miércoles, 22 de julio de 2015 5:32
  • 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.

    miércoles, 22 de julio de 2015 5:40
  • 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


    miércoles, 22 de julio de 2015 11:56