我正在尝试使用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会一直空着?
答案 0 :(得分:4)
使用时必须打开数据读取器的连接。 DataReader在创建数据时不会检索任何数据,它会在您使用数据时检索数据。在关闭连接之前,它无法检索您的所有数据库。