我正在我的C代码中使用MySqlParameter
如果要插入一条记录,代码如下所示:

        string query = "INSERT IGNORE INTO giveaways(giveaway_id, status) VALUES(@giveawayID, @status)";
        MySqlParameter[] parameters = {
            new MySqlParameter("@giveawayID", giveawayID),
            new MySqlParameter("@status", (byte) status)
        };

        await ExecuteNonQueryRetryAsync(query, parameters).ConfigureAwait(false);

但是,如果我想在一个SQL查询中插入多个记录,同时仍然使用MySqlParameter,我不知道如何实现类似的功能。
现在,我写了这样的东西:
        StringBuilder query = new StringBuilder("INSERT IGNORE INTO winners(giveaway_id, winner_id) VALUES");
        foreach (ulong winner in winners) {
            query.Append("('" + giveawayID + "'," + winner + "),");
        }

        query.Length -= 1; // Remove last char ',' from values
        await ExecuteNonQueryRetryAsync(query.ToString()).ConfigureAwait(false);

它可以工作,但根本不使用MySqlParameter。有没有更好的方法来实现这个目标?我的意思是,当我使用MySqlParameter时根本不需要担心这个问题时,我必须自己处理引文和其他类似的事情,这也是更好的IMHO方法。
所以真正的问题是。。。有没有什么方法可以用数组加载MySQL参数,或者用其他方法传递多个要插入的值?
提前谢谢你。
(标记了编码风格,因为我实际上正在尝试编写比已经编写的更好的内容)

最佳答案

我最初的想法是因为无法想出更好的方法,我只是用MySQL参数替换了giveawayID,因为我可以做一件事。

        StringBuilder query = new StringBuilder("INSERT IGNORE INTO winners(giveaway_id, winner_id) VALUES");
        foreach (ulong winnerID in winners) {
            query.Append("(@giveawayID, " + winnerID + "),");
        }

        query.Length -= 1; // Remove last char ',' from values

        MySqlParameter[] parameters = {
            new MySqlParameter("@giveawayID", giveawayID)
        };

        await ExecuteNonQueryRetryAsync(query.ToString(), parameters).ConfigureAwait(false);

如果有人发现更好的方法,请不要犹豫,张贴它,我真的希望有更好的办法。

08-07 11:54