我的代码中出错:找不到表0.我做错了什么?
OdbcCommand cmd = new OdbcCommand("Select * from User where username=? and password=?", cn);
DataSet ds = new DataSet();
//Select the username and password from mysql database in login table
cmd.Parameters.Add("@username", OdbcType.VarChar);
cmd.Parameters["@username"].Value = this.Login1.UserName;
cmd.Parameters.Add("@password", OdbcType.VarChar);
cmd.Parameters["@password"].Value = this.Login1.Password;
//use asp login control to check username and password
//Session["UserID"] = "usrName";
//set the UserID from the User Table unsure how to add this to the sql syntax above
OdbcDataReader dr = default(OdbcDataReader);
// Initialise a reader to read the rows from the login table.
// If row exists, the login is successful
dr = cmd.ExecuteReader();
DataTable dt = ds.Tables[0];
DataRow dp = dt.Rows[0];
if (dt.Rows.Count != 0)
{
Session["UserID"] = Convert.ToString(dp["UserID"]);
e.Authenticated = true;
Response.Redirect("UserProfileWall.aspx");
// Event Authenticate is true forward to user profile
}
}
}
答案 0 :(得分:2)
您的代码会创建一个空数据集,然后尝试从中获取一个表格 由于您从未在数据集中添加任何内容,因此会出现错误。
您需要使用从查询中获得的DataReader
(使用HasRows
属性)。
但是,强烈建议您
代替。它将为您节省大量代码并且更安全。
答案 1 :(得分:1)
将User
放在括号中:[User]
- 它是保留的。
我看到你正在使用MySQL - 我认为它是双引号:"User"
答案 2 :(得分:0)
您的参数是否需要以相同的方式在查询中?
而不是
"Select * from User where username=? and password=?"
应该是
"Select * from User where username=@username and password=@password",
编辑:这可能是关闭的,它可能是我们内部的sqlcommand特有的东西?