es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Buscar en la base de datos SQL con múltiples filtros.

Tengo el siguiente código:

List<string> L1 = new List<string>();
int Id = 1;

using (SqlConnection conn = new SqlConnection())
{<br>
    conn.ConnectionString = "...";
    SqlCommand cmd = conn.CreateCommand();

Esto me da las filas donde "category_id" es igual a 1.

`Ahora quiero que la instrucción SELECT devuelva filas donde “category_id” sea igual a uno de los valores que le doy.
Entonces, una simple instrucción SELECT se vería así:

SELECT * FROM categories WHERE category_id = 1 or category_id = 2
// devuelve todas las filas donde "category_id" es igual a 1 o 2

El problema es que no sabría los valores para buscar al configurar la instrucción SELECT.
Tendría los valores en una cadena, lista o algo similar.

Intenté usar un bucle foreach para cambiar el valor de "Id"

cmd.Parameters.Add(new SqlParameter("@Id", typeof(int)));
foreach (int val in Values)
{
    cmd.Parameters["@Id"].Value = val;
}

Pero esto solo devuelve las filas donde "category_id" es igual al último valor en el array "Valores".

He intentado usar el operador IN, pero obtuve un error.

cmd.CommandText = "SELECT * FROM categories WHERE category_id IN (@Id)";
cmd.Parameters.Add(new SqlParameter("@Id", Values));

Una última idea que tuve fue usar un loop para hacer una cadena del valor.

string ValueString = "0";
foreach (int val in Values)
{
    ValueString += ",";
    ValueString += Convert.ToString(val);
}

Aún no he probado esto, pero espero que dé un error ya que la columna "category_id" tiene el tipo de datos "int".

¿Hay alguna forma de buscar en la base de datos SQL con un array/lista como parámetro, para que devuelva cada fila donde sea igual a uno de los valores en el array/lista?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Sí, hay una forma de buscar en la base de datos SQL con un arreglo/lista como parámetro. En lugar de usar un solo parámetro, use múltiples parámetros para cada valor en la lista/arreglo. Esto se puede lograr utilizando SQL dinámico.

    Aquí hay un ejemplo de cómo hacerlo:

    List<int> valores = new List<int> { 1, 2, 3 };
    
    // Configurar la consulta SQL
    string consultaSql = "SELECT * FROM categorías WHERE id_categoria IN (";
    for (int i = 0; i < valores.Count; i++)
    {
        consultaSql += $"@Id{i},";
    }
    consultaSql = consultaSql.TrimEnd(',') + ")";
    
    // Configurar el objeto de comando
    SqlCommand comando = new SqlCommand(consultaSql, conexión);
    for (int i = 0; i < valores.Count; i++)
    {
        comando.Parameters.AddWithValue($"@Id{i}", valores[i]);
    }
    
    // Ejecutar la consulta
    SqlDataReader lector = comando.ExecuteReader();
    while (lector.Read())
    {
        // Procesar los resultados aquí
    }
    

    En este ejemplo, primero definimos una lista de enteros para buscar. A continuación, configuramos una consulta SQL dinámica que utiliza un parámetro para cada valor en la lista. Luego, creamos un objeto de comando y agregamos cada parámetro a él usando un bucle for. Finalmente, ejecutamos la consulta y procesamos los resultados como de costumbre. Este enfoque nos permite buscar cualquier cantidad de valores sin tener que modificar la consulta SQL manualmente.

Comments are closed.