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

时间:2015-12-25 15:56:33

标签: c# mysql coding-style mysql-connector

我在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);

但是,如果我想在仍然使用MySqlParameter的同时在一个SQL查询中插入多个记录,我不知道如何实现类似的事情。

现在,我写了这样的话:

        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参数或任何其他好的方法来传递多个值来插入?

提前谢谢。

(标记编码风格,因为我实际上是在尝试写一些比已经写好的东西更好的东西)

1 个答案:

答案 0 :(得分:1)

我最初的想法是因为无法想到更好的东西,我只是用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);

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