使用 MySqlParameters 在一个查询中插入多个

Multiple Insert in one query with MySqlParameters

我在我的 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 时根本不需要担心,这也是恕我直言的更好方法。

所以实际的问题是...有没有什么方法可以用数组加载 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);

如果有人找到更好的方法,请不要犹豫post它,我真的希望有更好的方法。