当使用MySql数据库时,第二次查询时报错“There is already an open DataReader associated with this Connection which must be closed”。
1,由于MySqlConnection(数据库连接)的对象是全局变量引用,虽然可以通过关闭数据库连接清除报警,但占用资源较大。--未采用
1 MySqlConnection sqlConnection = new MySqlConnection(connectionstr); 2 sqlConnection.Open(); 3 //ToDo: 4 sqlConnection.Close(); 5 sqlConnection.Dispose();
2,通过查找资料,发现可以通过using关键字自动释放。--一般这种情况都可以解决
using (MySqlCommand sqlCommand = new MySqlCommand(insertQuery, sqlConnection)) { sqlCommand.CommandType = CommandType.Text; foreach (MySqlParameter pa in parameters) { sqlCommand.Parameters.Add(pa); } rows = sqlCommand.ExecuteNonQuery(); }
3,当对再次数据库进行查询时,还是出现之前问题。

1 using (MySqlCommand sqlCommand = new MySqlCommand(queryStr, sqlConnection)) 2 { 3 sqlCommand.CommandType = CommandType.Text; 4 MySqlDataReader reader = sqlCommand.ExecuteReader(); 5 while (reader.Read()) 6 { 7 DataRow dr = dataTable.NewRow(); 8 int count = reader.FieldCount; 9 for (int i = 0; i < count; i++) 10 { 11 dr[i] = reader.GetString(i); 12 } 13 dataTable.Rows.Add(dr); 14 } 15 }
通过排查发现,MySqlDataReader reader 导致的,做法如下
①每次使用前 MySqlDataReader reader=null;
②在finally块中,对reader进行释放。 reader?.Close(); reader?.Dispose();
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南