gpt4 book ai didi

c# - C# 中的 MySqlDataReader 没有行

转载 作者:行者123 更新时间:2023-11-29 04:50:05 25 4
gpt4 key购买 nike

我正在尝试使用 mysql 数据库在 C# 中开发一个小的用户-用户消息传递系统(我的第一个 C# 应用程序)。

我知道最佳做法是使用 EF 之类的工具来处理数据库,但我以“愚蠢”的方式编写此代码只是为了熟悉语法。

我有 vb 背景,所以我基本上只是转换我通常在 vb 中做的事情,这就是为什么我不明白为什么尽管在我的数据库中有一个匹配的行,DataReader 总是返回没有行。见下文:

    protected void btnLogin_Click(object sender, EventArgs e)
{
Page.Validate("Login");

if (!IsValid)
{
return;
}

if (checkLogin())
{
Response.Redirect("Default.aspx");
}
else
{
lblErr.Text = "Invalid login attempt";
}
}

protected Boolean checkLogin()
{
MySql db = new MySql();

string sql = "select userid, firstname, lastname, ifnull(lastlogin, '') from users where email = @email and pass = @pass";

List<MySqlParameter> args = new List<MySqlParameter>();
args.Add(new MySqlParameter() { ParameterName = "@email", MySqlDbType = MySqlDbType.VarChar, Size = 100, Value = txtEmail.Text });
args.Add(new MySqlParameter() { ParameterName = "@pass", MySqlDbType = MySqlDbType.VarChar, Size = 20, Value = txtPass.Text });

MySqlDataReader dr = db.getReader(sql, args);

if (dr.HasRows)
{
dr.Read();

Session["userid"] = dr.GetInt32("userid");
Session["firstname"] = dr.GetString("firstname");
Session["lastname"] = dr.GetString("lastname");
Session["lastlogin"] = dr.GetDateTime("lastlogin");

dr.Close();

return true;
}
else
{
return false;
}
}

以上代码根据数据库检查用户输入,如果表中有与用户输入匹配的行,则返回一行...

这是与数据库交互的代码...

public class MySql
{
static string connStr = "data source=localhost; initial catalog=mail; user id=root; password=Ly@12157114;";
MySqlConnection conn = new MySqlConnection(connStr);

public MySqlDataReader getReader(string sql, List<MySqlParameter> args)
{
if (args.Count == 0)
{
return getReader(sql);
}
else
{
return getReader(sql, args.ToArray());
}
}
public MySqlDataReader getReader(string sql, MySqlParameter[] args = null)
{
MySqlCommand cmd = new MySqlCommand(sql, conn);

if (args != null)
{
cmd.Parameters.AddRange(args);
}

conn.Open();

MySqlDataReader dr = cmd.ExecuteReader();

conn.Close();

return dr;
}
}

我没有收到任何错误或任何表明此处出现问题的迹象,并且我肯定有与我在登录字段中输入的数据相匹配的数据。

谁能帮我理解为什么 DataReader 总是返回空的?

最佳答案

使用时必须打开数据阅读器的连接。 DataReader 在您创建时不检索任何数据,它在您使用时检索数据。在您关闭连接之前,它无法检索您的所有数据库。

关于c# - C# 中的 MySqlDataReader 没有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12915811/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com