我在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参数或任何其他好的方法来传递多个值来插入?
提前谢谢。
(标记编码风格,因为我实际上是在尝试写一些比已经写好的东西更好的东西)
答案 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);
如果有人发现更好的方法,请不要犹豫发布,我真的希望有更好的方法。