【问题标题】:Async working with MySQL DB异步使用 MySQL 数据库
【发布时间】:2015-01-13 07:29:44
【问题描述】:

我试图了解异步与 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 字符串处的 Async 方法失败:“reader.GetFieldValue (0) System.NotImplementedException: The requested feature is not implemented.”。 谁能向我解释一下,如何使用 ExecuteReaderAsync 并可能告诉我我的代码中的其他一些错误?

【问题讨论】:

  • 看起来 MySql 连接器没有实现该功能...这就是您收到错误的原因
  • 我怎样才能异步使用 MySQL DB?

标签: c# mysql asynchronous mono gtk#


【解决方案1】:

对于异步读取器,请使用 GetFieldValueAsync 而不是 GetFieldValue。 似乎 MySql 驱动程序没有为他们的异步读取器实现同步方法 - 但我不确定它对他们来说是独一无二的。

例子:

string colVal = await reader.GetFieldValueAsync<string>(0);

【讨论】:

  • 你能解释一下,如何使用 GetFieldValueAsync 吗?
  • 您使用的是什么版本的 MySql DotNetConnector?
  • v4.5, AssemblyVersion=6.9.5.0
  • 这有点像在黑暗中拍摄,但基于我在网上找到的其他解决方案,我建议您尝试内联初始化 Connection 对象(如以下解决方案 stackoverflow.com/questions/6866421/… )。如果有帮助,请更新我们。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-15
  • 2021-11-28
  • 1970-01-01
  • 2011-04-08
  • 1970-01-01
  • 2017-11-25
  • 2012-10-06
相关资源
最近更新 更多