与 MySQL DB 异步工作
本文关键字:工作 异步 DB MySQL | 更新日期: 2023-09-27 18:30:35
我试图理解与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 ();
}
同步方法通常输出我 10 行的带有数据的列,但异步方法在 GetFieldValue 字符串处失败:"reader。GetFieldValue (0) System.NotImplementException: 未实现请求的功能。任何人都可以向我解释如何使用ExecuteReaderAsync,并可能告诉我代码中的其他一些错误?
对于异步读取器,请使用 GetFieldValueAsync
而不是 GetFieldValue
。看起来好像 MySql 驱动程序没有为他们的异步读取器实现同步方法 - 但我不确定这对他们来说是唯一的。
例:
string colVal = await reader.GetFieldValueAsync<string>(0);