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.

¿Cómo combinar varias INSERT INTO con declaraciones preparadas?

¿Hay alguna manera de formular esto en una sola consulta con declaraciones preparadas usando Dapper?
La longitud de userIds es dinámica.

public static void LinkUsersToChatroom(int chatroomId, int[] userIds)
{
    using SqlConnection connection = new(connectionString);

    foreach (int userId in userIds)
    {
        connection.Execute(
            "INSERT INTO chatroom_users (chatroomId, userId) VALUES (@chatroomId, @userId)",
            new { chatroomId, userId });
    }
}
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, utilizando el método Execute de Dapper con un objeto de parámetros dinámico, podemos iterar a través del array de identificadores de usuario e insertarlos en la tabla chatroom_users con una sola sentencia preparada. Aquí hay un ejemplo:

    public static void LinkUsersToChatroom(int chatroomId, int[] userIds)
    {
        using SqlConnection connection = new(connectionString);
    
        string sql = "INSERT INTO chatroom_users (chatroomId, userId) VALUES (@chatroomId, @userId)";
    
        // crear una lista de objetos de parámetros para pasar al método `Execute` de Dapper
        List<object> parameterList = new();
    
        foreach (int userId in userIds)
        {
            parameterList.Add(new { chatroomId, userId });
        }
    
        // ejecutar la consulta una vez con todos los parámetros
        connection.Execute(sql, parameterList);
    }
    

    En este ejemplo, primero creamos una única consulta SQL con una sentencia preparada (@chatroomId y @userId) que se puede reutilizar para varias inserciones. Luego, iteramos a través del array userIds y poblamos una lista de objetos de parámetros creando un objeto nuevo con el chatroomId y el userId actual. Finalmente, pasamos tanto la consulta SQL como la lista de objetos de parámetros al método Execute, que ejecutará la consulta una vez con todos los parámetros.

Comments are closed.