首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >异步处理MySQL DB

异步处理MySQL DB
EN

Stack Overflow用户
提问于 2014-11-16 07:33:32
回答 1查看 3.5K关注 0票数 1

我试着理解异步如何使用DB。为此,我使用一个表创建了简单的MySQL数据库,并可以通过下一种方式从它获得信息:

代码语言:javascript
复制
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 ();
        }
    }

对于异步查询,我使用下面的代码:

代码语言:javascript
复制
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字符串中失败:"reader.GetFieldValue (0) System.NotImplementedException:未实现所请求的特性“。有人能向我解释如何使用ExecuteReaderAsync,并可能告诉我代码中的一些其他错误吗?

EN

回答 1

Stack Overflow用户

发布于 2014-11-16 07:38:45

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

示例:

代码语言:javascript
复制
string colVal = await reader.GetFieldValueAsync<string>(0);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26954858

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档