此 MySqlConnection 已用于带有 MySQL 的 .net
Posted
技术标签:
【中文标题】此 MySqlConnection 已用于带有 MySQL 的 .net【英文标题】:This MySqlConnection is already in use for .net with MySQL 【发布时间】:2021-12-19 22:48:41 【问题描述】:我一直在尝试从表中获取数据。代码可以在下面找到。 当我测试 API 时,出现错误“此 mysqlConnection 已在使用中”。 谁能告诉我我在这里做错了什么?或者在这里没有提及更多细节?
public async Task<object> GetFormListDetails()
try
MySqlConnection con = new MySqlConnection(@"Server=Localhost;Database=HotelManagement;Uid=root;Pwd=Onkar@123;");
con.Open();
MySqlCommand cmd = new MySqlCommand("select * from HotelManagement.MealType", con);
MySqlDataReader tableData = cmd.ExecuteReader();
var data = cmd.ExecuteNonQuery();
var count = tableData.FieldCount;
var myString = String.Empty;
using (tableData)
while (tableData.Read())
for (var i = 0; i < count; i++)
myString = tableData.GetValue(i).ToString();
tableData.Close();
return await Task.FromResult(new ResponseModel(ResponseCode.OK, myString, null));
con.Close();
return await Task.FromResult(new ResponseModel(ResponseCode.Error, "", "Faild to add data"));
catch (Exception ex)
return await Task.FromResult(new ResponseModel(ResponseCode.Error, ex.Message, null));
堆栈跟踪显示以下详细信息。
at MySqlConnector.Core.ServerSession.StartQuerying(ICancellableCommand command) in /_/src/MySqlConnector/Core/ServerSession.cs:line 294
at MySqlConnector.Core.CommandExecutor.<ExecuteReaderAsync>d__0.MoveNext() in /_/src/MySqlConnector/Core/CommandExecutor.cs:line 56
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at MySqlConnector.MySqlCommand.<ExecuteNonQueryAsync>d__69.MoveNext() in /_/src/MySqlConnector/MySqlCommand.cs:line 271
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
at MySqlConnector.MySqlCommand.ExecuteNonQuery() in /_/src/MySqlConnector/MySqlCommand.cs:line 101
at Hotel.Controllers.RoomController.<GetFormListDetails>d__2.MoveNext() in /Users/onkar/Projects/hm/HM/Controllers/RoomController.cs:line
【问题讨论】:
您是否缩短了错误文本#?不要这样做缺少有趣的部分 你在关闭连接之前返回。 还可以考虑将您的连接包装在using
语句中,以便在处理时将其关闭。
我能找到的最接近的东西,这可能是重复的***.com/questions/53627973/…
cmd.ExecuteNonQuery()
抛出异常是因为你的tableData
仍然打开,阻塞了连接con
。注意:您的代码似乎是异步的,但您只使用同步方法。所以你不会从这种异步中获得任何好处。您应该使用 MySqlConnector 中的类提供的异步方法,例如 ExecuteReaderAsync
、ReadAsync
等。您也可以返回 Task<ResponseModel>
而不是 Task
【参考方案1】:
请注释掉这行代码,然后重试:
//var data = cmd.ExecuteNonQuery();
如果不自己运行代码,则不能 100% 确定,但我相信这就是问题所在。在您的代码中,您已经在调用 cmd.ExecuteReader() 来检索您的数据。 MySql 似乎在交错这些数据库调用方面存在问题。
【讨论】:
以上是关于此 MySqlConnection 已用于带有 MySQL 的 .net的主要内容,如果未能解决你的问题,请参考以下文章
MysqlConnection 字符串:获取日期在 (yyyy-mm-dd hh:mm:ss)
[A]MySql.Data.MySqlClient.MySqlConnection 无法转换为 [B]MySql.Data.MySqlClient.MySqlConnection
&diesel::MysqlConnection 没有实现特征diesel::Connection