我有一个Access数据库,其中一个名为“users”的表有一行:
ID-用户名 - 密码--- ---管理员电子邮件--------------年龄---姓名 - 姓氏
1---ido_doron---123456-------True-----my@email.com---20-----Ido-----------Doron < / p>
现在,我尝试创建一个公共函数来检查用户是否已登录,以及他是管理员还是用户:
public static string CheckLoginStatus()
{
string username = (string)System.Web.HttpContext.Current.Session["username"];
string password = (string)System.Web.HttpContext.Current.Session["password"];
if (username == "" || password == "")
return "failure";
else
{
DataRow row = DBAccess.GetDataSet("SELECT * FROM users WHERE username='" + username + "';").Tables[0].Rows[0];
if (row["password"] == password)
{
if (row["admin"] == "True")
{
return "admin";
}
else
{
return "user";
}
}
else
{
return ("no");
}
}
}
每当我使用此功能时,都会收到错误:“位置0没有行。”
我正在添加假设连接数据库的函数(“ GetDataSet()”):
public static DataSet GetDataSet(string sqlStr)
{
DataSet ds = new DataSet();
OleDbConnection con = new OleDbConnection(ConnString());
OleDbCommand dbCmd = new OleDbCommand();
dbCmd.Connection = con;
dbCmd.CommandText = sqlStr;
OleDbDataAdapter adapter = new OleDbDataAdapter(dbCmd);
adapter.Fill(ds, "Table1");
return ds;
}
你知道为什么它不起作用吗?
答案 0 :(得分:1)
最可能的原因是这一行:
DataRow row = DBAccess.GetDataSet(
"SELECT * FROM users WHERE username='" + username + "';").Tables[0].Rows[0];
您假设将返回一个表格,其中至少有一行。
如果表中不存在username
,则不会返回任何内容。
暂时插入类似
的内容var data = DBAccess.GetDataSet(
"SELECT * FROM users WHERE username='" + username + "';").Tables[0];
在该行代码上放置一个断点,然后单步执行并确保data
有一个表格,其中包含您希望找到的记录。
答案 1 :(得分:0)
修改以下行
DataRow row = DBAccess.GetDataSet(“SELECT * FROM users WHERE username ='”+ username +“';”)。Tables [0] .Rows [0];
在访问数据之前检查数据表中的行数。如果count为零,则表示您的查询未返回任何记录。
答案 2 :(得分:0)
我不确定导致此错误的原因,但我重新创建了该功能,现在它可以正常工作:
public static string CheckLoginStatus()
{
string username = (string)System.Web.HttpContext.Current.Session["username"];
string password = (string)System.Web.HttpContext.Current.Session["password"];
if (username == "" || password == "")
return "no";
else if (DBAccess.GetDataSet("SELECT * FROM users WHERE username='" + username + "';").Tables[0].Rows.Count != 0)
{
DataRow row = DBAccess.GetDataSet("SELECT * FROM users WHERE username='" + username + "';").Tables[0].Rows[0];
if (row["password"].ToString() == password)
{
if (row["admin"].ToString() == "True")
return "admin";
else
return "user";
}
else
return "no";
}
else
return "no";
}