此 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 中的类提供的异步方法,例如 ExecuteReaderAsyncReadAsync 等。您也可以返回 Task&lt;ResponseModel&gt; 而不是 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

MySqlConnection.Open 无限期挂起

MySqlConnection 上的“InvalidOperationException:连接必须有效且打开”

无法使用 MySQLConnection 连接到远程数据库