首页 > 解决方案 > MySqlDataReader 对象未从函数接收任何数据

问题描述

我有一个发布操作方法,它从表单中获取用户名和密码。在此操作方法中,我使用一个函数对数据库执行 mysql 命令

这是从数据库中读取的函数

public static MySqlDataReader GetDataFromDB(string command)
{
    using (MySqlConnection con = new MySqlConnection(ConStr))
    {

        com = new MySqlCommand(command, con);

        con.Open();

        MySqlDataReader rdr1 = com.ExecuteReader();

        while (rdr1.Read())
        {
                    
        }

        return rdr1;
    }
}

这就是我尝试在我的操作方法中使用此功能的方式

MySqlDataReader rdr2 = Helper.GetDataFromDB("select * from library.Accounts where username = '" + username + "' and password = '" + password + "'");

我在辅助方法中放了一个断点,可以看到它正在从数据库中读取数据,它将所有预期的行数据存储在内部的“rdr1”对象中,但是由于“rdr2”对象为空,它最后没有返回任何内容一旦完成。我不知道是不是出了什么问题,或者我只是一个白痴,所以如果有人能告诉我我哪里出错了,我会很感激。

标签: c#mysqlasp.net

解决方案


数据读取器,例如MySqlDataReader仅转发。这意味着一旦数据被读取并移动到下一条记录或数据的末尾,它就不能回到开头。

如果您删除此代码块:

while (rdr1.Read())
{

}

您应该会发现它会在开始时返回数据读取器,因此能够读取您从数据库加载的数据。

此外,您应该知道,当 using () {...} 块完成时,连接将关闭,同时数据读取器读取数据的能力也会关闭。

如果您确实想返回数据读取器,请将 using() {...} 块删除为一个简单的语句,例如:

MySqlConnection con = new MySqlConnection(ConStr);

如果您确实想在数据加载后向后和向前导航、过滤或排序数据,您应该将数据DataTable从数据读取器加载到 a 中。

例子:

DataTable dt = new DataTable();
dt.Load(rdr1);

推荐阅读