【发布时间】: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语句中,以便在处理时将其关闭。 -
我能找到的最接近的东西,这可能是重复的stackoverflow.com/questions/53627973/…
-
cmd.ExecuteNonQuery()抛出异常是因为你的tableData仍然打开,阻塞了连接con。注意:您的代码似乎是异步的,但您只使用同步方法。所以你不会从这种异步中获得任何好处。您应该使用 MySqlConnector 中的类提供的异步方法,例如ExecuteReaderAsync、ReadAsync等。您也可以返回Task<ResponseModel>而不是 Task
标签: c# mysql .net-core mysql-workbench