我试图理解使用数据库的异步操作。为此,我用一个表创建了简单的 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.NotImplementedException: 请求的功能未实现。”。 任何人都可以向我解释如何使用 ExecuteReaderAsync 并告诉我我的代码中的其他一些错误吗?
最佳答案
对于异步读取器,请使用 GetFieldValueAsync
而不是 GetFieldValue
。
似乎 MySql 驱动程序没有为其异步读取器实现同步方法 - 但我不确定它是否对它们来说是独一无二的。
例子:
string colVal = await reader.GetFieldValueAsync<string>(0);
关于c# - 异步使用 MySQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26954858/