Async working with MySQL DB

3.5k views Asked by At

I trying to understand async working with DB. For it , I create simple MySQL database with one table and I can get info from it by the next way:

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 ();
        }
    }

For async query, I use next code:

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 ();
        }

Sync method normally output me column of 10 rows with data, but Async method failure at GetFieldValue string: "reader.GetFieldValue (0) System.NotImplementedException: The requested feature is not implemented.". Can anybody explain to me, how to use ExecuteReaderAsync and may be tell me about my some other mistakes in my code?

1

There are 1 answers

4
Moti Azu On

For async readers, use GetFieldValueAsync instead of GetFieldValue. It appears as if MySql driver didn't implement synchronous methods for their async readers - but I'm not sure it's unique for them.

Example:

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