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?
For async readers, use
GetFieldValueAsyncinstead ofGetFieldValue. 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: