Saltar al contenido

Añadir lista a un parámetro de mysql

Solución:

cuando lo paso a MySqlParameter y esto se reconoce como una cadena, pone en la consulta sql como “1 , 2 , 3 , 4” y esto no devuelve los valores esperados.

Me encontré con esto anoche. Encontré que FIND_IN_SET funciona aquí:

SELECT * FROM table WHERE FIND_IN_SET(id, @parameter) != 0
...
intArray = new List<int>(){1,2,3,4};
conn.Command.Parameters.AddWithValue("parameter", string.Join(",", intArray));

Aparentemente, esto tiene algunas limitaciones de longitud (encontré su publicación buscando una solución alternativa), pero esto puede funcionar para usted.

Los parámetros no funcionan con IN. Siempre he incrustado cosas como una cadena en la consulta en sí. Si bien eso generalmente se considera de mala forma debido a la inyección de SQL, si está construyendo la consulta a partir de una lista numérica fuertemente tipada, entonces no debería haber posibilidad de que ninguna entrada externa la corrompa de manera significativa.

tendrá que iterar sobre su matriz y crear la lista usted mismo

// no parameters
var sb = new StringBuilder();
for(int i=0;i<intArray.Length;i++)
{
    sb.Append(intArray[i] + ",");// no SQL injection they are numbers
}
if (sb.Length>0) {sb.Length-=1;}
string sql = "SELECT * FROM table WHERE id IN (" + sb.ToString() + ")";

ACTUALIZACIÓN: Habiendo pensado más sobre esto, volveré a mi respuesta original (a continuación), que es usar parámetros. Las optimizaciones de las consultas creadas y todo lo que el motor de la base de datos pueda reunir dependen de usted.

// no parameters
var sb = new StringBuilder();
for(int i=0;i<intArray.Length;i++)
{
    sb.AppendFormat("p{0},", i);// no SQL injection they are numbers
    connection.Command.Parameters.AddWithValue("p"+i, intArray[i]);
}
if (sb.Length>0) {sb.Length-=1;}
string sql = "SELECT * FROM table WHERE id IN (" + sb.ToString() + ")";
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *