簡體   English   中英

插入和更新mysql值C#

[英]Insert and Update mysql values c#

我在我的twitch機器人中使用此代碼對消息進行計數,並將它們每分鍾幾次存儲到數據庫中。

因此,我擁有的當前代碼確實從數據庫中獲取了我想要的值,但是我無法正確更新或插入值。 insert_cmd確實會執行,但是數據庫中的值與我嘗試插入的值不對應。 受影響的行確實返回應該受到影響的行的正確答案。 另外,當我寫出insert_cmd字符串時,它看起來確實正確。

     private static void update_messages()
    {
        try
        {
            MySql.Data.MySqlClient.MySqlConnection mysql_connection = new MySql.Data.MySqlClient.MySqlConnection();
            mysql_connection.ConnectionString = mysql_connection_string;
            mysql_connection.Open();

            //build query string
            string select_cmd = "SELECT * FROM taperen.messages where username in (";
            foreach(CountData cd in chat_messages)
            {
                //Console.WriteLine(cd.username);
                select_cmd += "\'" + cd.username + "\',";
            }
            if(select_cmd == "SELECT * FROM taperen.messages where username in (")
            {
                mysql_connection.Close();
                return;
            }
            select_cmd = select_cmd.TrimEnd(select_cmd[select_cmd.Length - 1]);
            select_cmd += ");";
            //Console.WriteLine(select_cmd);


            MySql.Data.MySqlClient.MySqlCommand myCommand = mysql_connection.CreateCommand();
            myCommand.CommandText = select_cmd;
            MySql.Data.MySqlClient.MySqlDataReader reader = myCommand.ExecuteReader();


            string insert_cmd = "";
            while (reader.Read())
            {
                string username = reader["username"].ToString();
                int index = chat_messages.FindIndex(x => x.username.Equals(username));

                int current_online_count = chat_messages[index].online_count;
                int current_offline_count = chat_messages[index].offline_count;

                int db_online_count = (int)reader["online_count"];
                int db_offline_count = (int)reader["offline_count"];

                int new_online_count = current_online_count + db_online_count;
                int new_offline_count = current_offline_count + db_offline_count;
                insert_cmd += $"UPDATE `taperen`.`messages` SET `online_count`='{new_online_count}', `online_count`='{new_offline_count}' WHERE `id`='{reader["id"]}';";

                chat_messages.RemoveAt(index);
                //Console.WriteLine(username);
            }
            reader.Close();
            mysql_connection.Close();
            foreach(CountData cd in chat_messages)
            {
                insert_cmd += $"INSERT INTO `taperen`.`messages` (`username`, `online_count`, `offline_count`) VALUES ('{cd.username}', '{cd.online_count}', '{cd.offline_count}');";
            }

            mysql_connection.Open();


            //Console.WriteLine(insert_cmd);

            myCommand.CommandText = insert_cmd;
            int affectedRows = myCommand.ExecuteNonQuery();
            Console.WriteLine(affectedRows);
            myCommand.Dispose();

            mysql_connection.Close();
        }
        catch (MySql.Data.MySqlClient.MySqlException ex)
        {
            Console.WriteLine(ex.Message);
        }
    }

CountData類如下所示:

public class CountData
{
    public string username { get; set; }
    public int online_count { get; set; }
    public int offline_count { get; set; }
}

該數據庫如下所示: 數據庫

另外,如果我在代碼中做了其他愚蠢的事情,我也很感謝您能帶一些技巧:)

在這一行中,您要設置online_count兩次,第二個實例(大概)應該是offline_count

insert_cmd + = $ “UPDATE taperenmessages SET online_count = '{} new_online_count', online_count = '{} new_offline_count' WHERE id = '{讀取器[ ”ID“]}',”;

您需要挑選出由代碼生成的查詢。 然后直接將其運行到Mysql中,然后比較它返回的內容。 它看起來是mysql返回最后執行查詢的行。 當您先組合更新,然后組合插入時,因此將影響插入的行。 但是您可以通過直接運行查詢來確認。 確保注釋掉這樣的代碼:

// int受影響的行= myCommand.ExecuteNonQuery();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM