You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#从MySQL数据库查询数据出现重复翻倍问题求助

解决MySQL读取数据到C# List出现数据翻倍的问题

首先看你的代码逻辑,单从这段读取数据的代码来看,是没明显问题的——用MySqlDataReader循环读取每一行并添加到List,正常来说应该和数据库返回的条目数一致。但你遇到了数据翻倍的情况,我来梳理几个常见的排查方向,再结合你后来的更新说明问题所在:

可能的排查方向

  • 检查List的复用逻辑:如果answerData是一个全局变量,或者在执行这段读取代码前没有被清空(比如没调用answerData.Clear()),那么每次执行这段代码都会往已有数据的List里追加新内容,次数多了就会出现数据翻倍/重复的情况。
  • 确认读取代码是否被执行多次:比如这段代码是不是绑定了某个会重复触发的事件(比如按钮点击事件被注册了两次),或者在其他地方也调用了相同的读取逻辑,导致两次读取数据都加到了同一个List里。
  • 验证SQL查询结果:直接在MySQL客户端执行你的查询语句(把{selected}替换成实际的选中值),看看返回的结果是不是确实只有18条,排除数据库本身存在重复数据的可能。
  • 检查List是否被其他代码共享:如果answerData这个List实例被其他类或方法引用,并且那些地方也在往里面添加数据,就会导致最终的条目数超出数据库实际的记录数。

你的问题解决情况

根据你后来的更新,问题根源正是answerData同时被另一个类使用——其他类也在对这个List进行添加操作,导致最终数据是数据库的两倍。移除该类对这个List的引用后,数据恢复正常。

额外建议:避免SQL注入风险

你的代码里用了字符串拼接来构建SQL语句,这存在SQL注入的安全隐患。建议改成参数化查询,示例如下:

string query2 = "SELECT odgovor FROM appdb.odgovori WHERE nazivAnkete = @selected;";
using (MySqlCommand command = new MySqlCommand(query2, conn))
{
    command.Parameters.AddWithValue("@selected", selected);
    using (MySqlDataReader reader = command.ExecuteReader())
    {
        while (reader.Read())
        {
            answerData.Add(reader.GetString(0));
        }
    }
}

内容的提问来源于stack exchange,提问作者codeFreak24

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 17:48:13