【发布时间】:2021-04-04 04:51:32
【问题描述】:
我有一个 post action 方法,它从表单中获取用户名和密码。在这个动作方法中,我使用一个函数来对数据库执行 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”对象完成后为空。我不知道是不是出了什么问题,或者我只是个白痴,所以如果有人能告诉我哪里出错了,我会很感激。
【问题讨论】:
-
数据读取器是一个只向前的数据读取类。一旦你读完了,就没有更多的东西要读了,你不能再回到开始了。如果要取回数据,则应使用 dataTableInstance.Load(cmd.ExecuteReader()) 填充 DataTable 并返回 DataTable
-
还要考虑,即使您不启动读取循环,也无法将 rdr1 还给调用者,因为您的代码从 using 语句中退出,并且连接将在此时关闭。因此,datareader 无法再从数据库中读取任何内容