我试着理解异步如何使用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 ();
}Sync方法通常输出包含数据的10行列,但异步方法在GetFieldValue字符串中失败:"reader.GetFieldValue (0) System.NotImplementedException:未实现所请求的特性“。有人能向我解释如何使用ExecuteReaderAsync,并可能告诉我代码中的一些其他错误吗?
发布于 2014-11-16 07:38:45
对于异步读取器,请使用GetFieldValueAsync而不是GetFieldValue。看起来,MySql驱动程序似乎没有为异步读取器实现同步方法--但我不确定它对它们是否是唯一的。
示例:
string colVal = await reader.GetFieldValueAsync<string>(0);https://stackoverflow.com/questions/26954858
复制相似问题