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
相关产品推荐
相关产品推荐

