c# - 异步使用 MySQL 数据库

标签 c# mysql asynchronous mono gtk#

我试图理解使用数据库的异步操作。为此,我用一个表创建了简单的 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/

相关文章:

javascript - 无法在具有匿名函数的函数内使用 "this"

c# - Objective C 的 C# 开发人员指南?

c# - XAML:如何更改特定 ResourceDictionary 的来源

MySQL utf8mb4,保存表情符号时出错

php - MySQL 服务器因大文本查询而过载?

C++ boost asio Windows 文件句柄 a​​sync_read_until 无限循环 - 没有 eof

c# - 如何关闭 Windows 服务应用程序的所有后台线程?

c# - 使用 Lambda 或 LINQ 查询在给定日期范围内按年和月分组

php - 避免mysql中重复输入

javascript - 谷歌地理编码,异步Javascript,不起作用