每当我尝试连接数据库时,我都会收到错误消息

时间:2014-02-01 11:37:37

标签: c# asp.net database ms-access dataset

我有一个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;
}

你知道为什么它不起作用吗?

3 个答案:

答案 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";
}
相关问题