我的代码中出错:找不到表0.我做错了什么?

时间:2011-03-21 18:06:26

标签: c# asp.net mysql sql html

我的代码中出错:找不到表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
        }

    }

}

3 个答案:

答案 0 :(得分:2)

您的代码会创建一个空数据集,然后尝试从中获取一个表格 由于您从未在数据集中添加任何内容,因此会出现错误。

您需要使用从查询中获得的DataReader(使用HasRows属性)。

但是,强烈建议您

使用ASP.Net的内置表单身份验证系统

代替。它将为您节省大量代码并且更安全。

答案 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特有的东西?