System.IndexOutOfRangeException:找不到表0

时间:2013-10-03 11:17:20

标签: c# html asp.net ajax sql-server-2008

Dal代码

 public DataSet selectlogin(string u_name, string u_password, string u_email, string action)
    {
        SqlConnection con = new SqlConnection(h);
        SqlCommand cmd = new SqlCommand("", con);
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.CommandText = "sp_login";
        cmd.Parameters.AddWithValue("@name", u_name);
        cmd.Parameters.AddWithValue("@email", u_email);
        cmd.Parameters.AddWithValue("@password", u_password);
        cmd.Parameters.AddWithValue("@action", action);
        con.Open();
        cmd.ExecuteNonQuery();

    DataSet ds = new DataSet();
    SqlDataAdapter ad = new SqlDataAdapter(cmd);
    ad.Fill(ds);
    return ds;
    con.Close();
}

Bal代码

 public DataSet selectlogin(string u_name, string u_password, string u_email, string action)
    {
        DataSet ds = new DataSet();
        ds = obj.selectlogin(u_name, u_password, u_email, action);
        return ds;
    }

CS代码

protected void Btn_log(object sender, EventArgs e)
    {
        DataSet ds = new DataSet();

        ds = obj.selectlogin("", TextBox1.Text, TextBox2.Text,"login");

        if (ds.Tables[0].Rows.Count > 0)
        {
            Response.Redirect("dashboard.aspx");
        }


    }

存储过程

if(@action='login')

select * from login where u_email=@email and u_pass=@password

3 个答案:

答案 0 :(得分:1)

麻烦可能在这里:

if (ds.Tables[0].Rows.Count > 0)

首先检查索引为0的表是否存在,然后尝试访问属性...

if (ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0 )

这应该有所帮助。或者至少它会告诉你返回的数据集是空的(里面没有表)。

答案 1 :(得分:0)

试试这个

protected void Btn_log(object sender, EventArgs e)
    {
        DataSet ds = new DataSet();

        ds = obj.selectlogin("", TextBox1.Text, TextBox2.Text,"login");
    bool hasRows = ds.Tables.Cast<DataTable>()
                               .Any(table => table.Rows.Count != 0);
        if (hasRows)
        {
            Response.Redirect("dashboard.aspx");
        }

    }

或尝试一下(使用!=运算符代替&gt;运算符

if (ds.Tables[0].Rows.Count **!=** 0)
        {
            Response.Redirect("dashboard.aspx");
        }

答案 2 :(得分:0)

CS代码

protected void Btn_log(object sender, EventArgs e)
{
    DataSet ds = new DataSet();

    ds = obj.selectlogin("", TextBox1.Text, TextBox2.Text,"login");

    if (ds!=null && ds.Tables[0].Count > 0 && ds.Tables[0].Rows.Count > 0)
    {
        Response.Redirect("dashboard.aspx");
    }
}