Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用MySqlParameters在一个查询中多次插入_C#_Mysql_Coding Style_Mysql Connector - Fatal编程技术网

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

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),

我在C#code中使用了
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参数中。