c# – 异步使用MySQL DB

C#异步读取MySQL数据库的问题解决。

我试图了解异步使用数据库。为此,我用一个表创建了简单的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);
weinxin
我的微信
一个码农、工程狮、集能量和智慧于一身的、DIY高手、小伙伴er很多的、80后奶爸。
Igor
  • 版权声明: 发表于 2023-01-0210:35:59
  • 转载注明:http://blog.tsingmac.com/prolions/codelanguage/mscs/5560/
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: