【问题标题】:I get an error in my code: Cannot find table 0. what am I doing wrong?我的代码中出现错误:找不到表 0。我做错了什么?
【发布时间】:2011-07-19 21:31:43
【问题描述】:

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

    }

}

【问题讨论】:

  • 不要以纯文本形式存储密码
  • 另外,不要选择 *,只返回你真正需要的。在这种情况下,看起来你应该只是做“选择用户ID ...”
  • 您应该在using 语句中处理数据库内容。另外,你不需要初始化dr
  • 我只是想修复错误,我不确定如果有人可以发布一个 asnwer 来纠正我的错误,那将是一种善意的错误!

标签: c# asp.net mysql sql html


【解决方案1】:

User 放在括号中:[User] - 这是保留的。

我看到你正在使用 MySQL - 我认为它是双引号:"User"

【讨论】:

  • 没有。他的查询成功了。
【解决方案2】:

您的参数是否需要以相同的方式出现在查询中?

而不是

"Select * from User where username=? and password=?"

应该是

"Select * from User where username=@username and password=@password", 

编辑:这可能有点不对劲,可能是我们内部 sqlcommand 的特定内容?

【讨论】:

  • 没有。他的查询成功了。
  • 您至少可以在 MySQL 中使用?@
【解决方案3】:

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

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

但是,我强烈建议您

使用 ASP.Net 内置的表单认证系统

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

【讨论】:

  • 我认为问题在于实际查询,而不是之后的代码。
  • @Josh:不; SQL 不会给出那个错误。在 LINQPad 中运行 new DataSet().Tables[0] 会得到这个确切的错误。
  • cant use has rows mono crash with hasrows
  • 然后可以调用Read()查看其返回值。
  • @SLaks,您建议只使用 Forms 身份验证,还是与内置的 AspNetSqlMembershipProvider 提供程序结合使用?
猜你喜欢
  • 2021-08-04
  • 1970-01-01
  • 2021-11-28
  • 1970-01-01
  • 1970-01-01
  • 2021-09-06
  • 1970-01-01
  • 2017-09-29
  • 2021-05-09
相关资源
最近更新 更多