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?
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:
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.