【问题标题】:This MySqlConnection is already in use for .net with MySQL此 MySqlConnection 已用于带有 MySQL 的 .net
【发布时间】: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 中的类提供的异步方法,例如 ExecuteReaderAsyncReadAsync 等。您也可以返回 Task&lt;ResponseModel&gt; 而不是 Task.

标签: c# mysql .net-core mysql-workbench


【解决方案1】:

请注释掉这行代码,然后重试:

//var data = cmd.ExecuteNonQuery();

如果不自己运行代码,则不能 100% 确定,但我相信这就是问题所在。在您的代码中,您已经在调用 cmd.ExecuteReader() 来检索您的数据。 MySql 似乎在交错这些数据库调用方面存在问题。

【讨论】:

    猜你喜欢
    • 2019-05-06
    • 2021-10-19
    • 2021-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-04
    相关资源
    最近更新 更多