c# - 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”对象为空,它最后没有返回任何内容一旦完成。我不知道是不是出了什么问题,或者我只是一个白痴,所以如果有人能告诉我我哪里出错了,我会很感激。
解决方案
数据读取器,例如MySqlDataReader
仅转发。这意味着一旦数据被读取并移动到下一条记录或数据的末尾,它就不能回到开头。
如果您删除此代码块:
while (rdr1.Read())
{
}
您应该会发现它会在开始时返回数据读取器,因此能够读取您从数据库加载的数据。
此外,您应该知道,当 using () {...} 块完成时,连接将关闭,同时数据读取器读取数据的能力也会关闭。
如果您确实想返回数据读取器,请将 using() {...} 块删除为一个简单的语句,例如:
MySqlConnection con = new MySqlConnection(ConStr);
如果您确实想在数据加载后向后和向前导航、过滤或排序数据,您应该将数据DataTable
从数据读取器加载到 a 中。
例子:
DataTable dt = new DataTable();
dt.Load(rdr1);
推荐阅读
- python - 有没有办法使用 BeautifulSoup/requests 抓取搜索框,然后搜索和刷新?
- asp.net-web-api - 如何在经典 asp 中使用 asp.net web api?
- sapui5 - 如何在 sap UI5 中获取视图取决于用户?
- python-3.x - How to import tfrecord files in a pandas dataframe?
- javascript - 如何为 Map javascript 指定类型?
- python - 如何过滤掉具有二进制类的列,这些列低于python中的特定频率?
- c - 使用有序编译指示在 msvc 上的 openmp 比预期慢
- python - How to select an optimal (cost) team of sellers from a list, given a list of items needed
- php - PHP - filemtime(): stat failed for
- java - Finding the label of an input field in Selenium Webdriver