我试图了解异步使用数据库。为此,我用一个表创建了简单的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字符串的Async方法失败:“ reader.GetFieldValue(0)System.NotImplementedException:所请求的功能未实现。”。
有人可以向我解释如何使用ExecuteReaderAsync,并且可以告诉我代码中的其他错误吗?
最佳答案:
对于异步阅读器,请使用GetFieldValueAsync
而不是GetFieldValue
。
看来MySql驱动程序没有为其异步阅读器实现同步方法-但我不确定它对他们来说是唯一的。
例:
- string colVal = await reader.GetFieldValueAsync<string>(0);
文章末尾固定信息

我的微信
我的微信
一个码农、工程狮、集能量和智慧于一身的、DIY高手、小伙伴er很多的、80后奶爸。
评论