C# 使用MySqlParameters在一个查询中多次插入
我在C#code中使用了C# 使用MySqlParameters在一个查询中多次插入,c#,mysql,coding-style,mysql-connector,C#,Mysql,Coding Style,Mysql Connector,我在C#code中使用了MySqlParameter 如果要插入一条记录,代码如下所示: string query = "INSERT IGNORE INTO giveaways(giveaway_id, status) VALUES(@giveawayID, @status)"; MySqlParameter[] parameters = { new MySqlParameter("@giveawayID", giveawayID),
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);
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);
然而,如果我想在一个SQL查询中插入多条记录,同时仍然使用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);
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参数替换了
GivawayID
,因为我可以做到这一点
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);
如果有人发现了更好的方法,请毫不犹豫地发布它,我真的希望有更好的方法。对于引用的文本,您不能在查询中使用string.Format函数。Append函数..?是的,这部分可能写得更好,我很可能会重写它,但是我想知道是否有一种方法可以使用MySqlParameter而不是手动执行所有这些操作。。?另外,当我在Sql Server中插入大量数据而不使用
Bulk Inserts
时,因为我们的DBA
关闭了Sql Server中的该功能,我自己创建了一个临时表,然后将数据表中的所有数据传入一次,转换成XML,并以这种方式进行批量插入。。太容易了。。或者你可以在db上创建一个用户定义的类型,也可以这样做。我的意思是,当我使用MySQL参数时,我只是加载它们,看看代码示例“1”,没有任何引用。当我不使用它们时,我需要处理引用自己。您上面建议的是更好的处理引用的方法——我很欣赏,但我想知道的是,是否有一种方法可以避免引用并将数组加载到MySQL参数中。