与 MySQL DB 异步工作

本文关键字:工作 异步 DB MySQL | 更新日期: 2023-09-27 18:30:35

我试图理解与DB一起工作的异步。为此,我用一个表创建了简单的MySQL数据库,我可以通过以下方式从中获取信息:

public static void SyncRead(MySqlConnection ConnectionToDb, string TableName, string ColumnName)
    {
        string strOfCommandForSelect;
        strOfCommandForSelect = string.Format ("SELECT {0} " +
                                               "FROM {1} ",
                                               ColumnName,
                                               TableName);
        ConnectionToDb.Open ();
        try
        {
            using (MySqlCommand command = new MySqlCommand(strOfCommandForSelect, ConnectionToDb)) 
            {
                using (MySqlDataReader reader = command.ExecuteReader()) 
                {
                    while (reader.Read()) 
                    {
                        if(!reader.IsDBNull(reader.GetOrdinal(ColumnName)))
                        {
                            Console.WriteLine(reader.GetString(ColumnName));
                        }
                        else
                        {
                            Console.WriteLine("Failure");
                        }
                    }
                    reader.Close ();
                }
            }
        }
        finally 
        {
            ConnectionToDb.Close ();
        }
    }

对于异步查询,我使用下一个代码:

public static async Task AsyncRead(MySqlConnection Connection, string TableName, string ColumnName) 
        {
            string strOfCommandForSelect = string.Format ("SELECT {0} " +
                                                   "FROM {1} ",
                                                   ColumnName,
                                                   TableName);
            Connection.Open ();
            using (MySqlCommand command = new MySqlCommand(strOfCommandForSelect, connection)) 
            {
                DbDataReader reader = await command.ExecuteReaderAsync ();
                while (reader.Read()) 
                {
                    string colVal=reader.GetFieldValue<string> (0);
                    Console.WriteLine (colVal);
                }
            }
            await Connection.CloseAsync ();
        }

同步方法通常输出我 10 行的带有数据的列,但异步方法在 GetFieldValue 字符串处失败:"reader。GetFieldValue (0) System.NotImplementException: 未实现请求的功能。任何人都可以向我解释如何使用ExecuteReaderAsync,并可能告诉我代码中的其他一些错误?

与 MySQL DB 异步工作

对于异步读取器,请使用 GetFieldValueAsync 而不是 GetFieldValue 。看起来好像 MySql 驱动程序没有为他们的异步读取器实现同步方法 - 但我不确定这对他们来说是唯一的。

例:

string colVal = await reader.GetFieldValueAsync<string>(0);