none
como usar la sentencia "ORDER BY" en un datagridview c# SQL RRS feed

  • Pregunta

  • Saludos estoy tratando de hacer que los datos en mi datagridview tengan un orden descendente (de la "z" a la "a") para ello creo un procedimiento almacenado con la sentencia "ORDER BY":

    CREATE PROC ORDENAR
    @IDCATEGORIA INT,
    @NOMBRE NVARCHAR(30)
    AS
    SELECT IDCATEGORIA, NOMBRE FROM clasificacion
    WHERE NOMBRE = @NOMBRE
    ORDER BY NOMBRE  DESC;
    

    Y luego llamo a ese procedimiento almacenado de esta forma:

    public void ordenarcategoria(E_CATEGORIA categoria) { using (var conexion = new SqlConnection(ConfigurationManager.ConnectionStrings["conectar"].ConnectionString)) { conexion.Open(); SqlCommand CMD = new SqlCommand("ORDENAR", conexion); CMD.CommandType = CommandType.StoredProcedure; CMD.Parameters.AddWithValue("@NOMBRE",""); CMD.Parameters.AddWithValue("@IDCATEGORIA", 1); CMD.Parameters.AddWithValue("DESCRIPCION", ""); CMD.ExecuteNonQuery(); conexion.Close(); }


    Lo que no se ahora es como aplicar ese procedimiento almacenado en mi datagridview, apreciaria mucho su ayuda

    domingo, 14 de marzo de 2021 3:35

Todas las respuestas

  • ¿Por qué le pasas el parámetro "DESCRIPCION"? No existe en el procedimiento almacenado.

    En cualquier caso, la cuestión es que no tienes que llamarlo mediante CMD.ExecuteNonQuery, porque eso lo ejecuta y descarta los resultados, así que no te sirve ara nada porque precisamente lo que tú quieres es recuperar los resultados. Para eso se puede usar ExecuteReader o usar algún componente tal como un DataAdapter que internamente envía el ExecuteReader. Por ejemplo, con un DataAdapter:

                using (var conexion = new SqlConnection(ConfigurationManager.ConnectionStrings["conectar"].ConnectionString))
                {
                    SqlCommand CMD = new SqlCommand("ORDENAR", conexion);
                    CMD.CommandType = CommandType.StoredProcedure;
                    CMD.Parameters.AddWithValue("@NOMBRE","");
                    CMD.Parameters.AddWithValue("@IDCATEGORIA", 1);
                    
                    SalDataAdapter da = new SqlDataAdapter(CMD);
                    DataTable dt = new DataTable();
                    da.Fill(dt);
    
                    dataGridView1.DataSource = dt;
                }

    Te he quitado el Open y el Close de la conexión porque no son necesarios cuando usas un DataAdapter. Éste último ya sabe abrir y cerrar internamente la conexión cuando la utiliza.

    domingo, 14 de marzo de 2021 10:08