索引(从零开始)必须大于或等于零?

时间:2016-03-16 14:26:03

标签: c# sql asp.net

这是我得到的错误:

  

索引(从零开始)必须大于或等于零且小于参数列表的大小

这是代码:

<%@ Page Language="C#"%>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.OleDb" %>


<!DOCTYPE html>

<script runat="server">



public void Page_Load()
{
    string a, c;
    a = Request.Form["username"];

    string connstring = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Server.MapPath("SQL/Site_Database.accdb");
    string sqlstring = string.Format("select * from iUsers_Table where (iusername='{0}')", a);
    OleDbDataAdapter da = new OleDbDataAdapter(sqlstring, connstring);
    DataSet ds = new DataSet();
    da.Fill(ds);


    c = Request.Form["mail"];

    string connstring1 = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Server.MapPath("SQL/Site_Database.accdb");
    string sqlstring1 = string.Format("select * from iUsers_Table where (imail='{0}')", c);
    OleDbDataAdapter da1 = new OleDbDataAdapter(sqlstring1, connstring1);
    DataSet ds1 = new DataSet();
    da1.Fill(ds1);

    if ((ds.Tables[0].Rows.Count == 0) || (ds1.Tables[0].Rows.Count == 0))
    {

        string b, d, e, f, g, h;

        b = Request.Form["password"];
        d = Request.Form["gender"];
        e = Request.Form["age"];
        f = Request.Form["prob"];
        g = Request.Form["prob_val"];
        h = Request.Form["fitness"];

        sqlstring = string.Format("insert into iUsers_Table (iusername,ipassword,imail,igender,iage,iproblem,iproblem_value,ifitness) values('{0}','{1}','{2}','{3}',{4},'{5}',{6},'{7}')", a, b, c, d, e, f, g, h);
        OleDbConnection conn = new OleDbConnection(connstring);
        OleDbCommand cmd = new OleDbCommand(sqlstring, conn);
        conn.Open();
        cmd.ExecuteNonQuery();
        conn.Close();

        Session["connect_status"] = "connected";
        Response.Redirect("My_Plan.aspx");

    }

    else

    {
        if ((ds.Tables[0].Rows.Count) > 0)
        {
            Session["subscribed"] = "exist";

            if ((ds1.Tables[0].Rows.Count) > 0)
            {
                Session["mail"] = "exist";
                Response.Redirect("index.aspx");
            }

            Response.Redirect("index.aspx");
        }
    }
}
</script>

我创建了一个注册表单,此代码用于将数据插入数据库,并检查现有的相同邮件和用户名值。

任何人都知道为什么会这样吗?

谢谢!

4 个答案:

答案 0 :(得分:3)

string sqlstring1 = string.Format("select * from iUsers_Table where (imail='{2}')", c);

{2}不存在,因为string.Format()中只有一个参数。 请注意,我用谷歌搜索了它,导致我here(暗示提示)。

所以改成它: string sqlstring1 = string.Format("select * from iUsers_Table where (imail='{0}')", c);

再试一次。

答案 1 :(得分:0)

鉴于你没有发现错误发生的行,我将假设问题出在这行代码上,因为它错了:

string sqlstring1 = string.Format("select * from iUsers_Table where (imail='{2}')", c);

{2}应该是{0},因为它是一个基于零的索引,并且你只告诉string.Format需要一个参数。

答案 2 :(得分:0)

正如其他人回答的那样,问题是你的string.Format。但我还要指出在C#6中添加Interpolated Strings可以让你改变

limb

string sqlstring1 = string.Format("select * from iUsers_Table where (imail='{0}')", c);

这是一种更清晰,更易读的格式化字符串的方法,应该有助于避免将来容易出错。

修改:由于没有修复您的异常,请确保string sqlstring1 = $"select * from iUsers_Table where (imail='{c}')"大于0,如果ds.Tables.Length ds.Tables[0] ds.Tables将会抛出异常{1}}为空。

我也注意到你错过了

中的一些引用
sqlstring = string.Format("insert into iUsers_Table (iusername,ipassword,imail,igender,iage,iproblem,iproblem_value,ifitness) values('{0}','{1}','{2}','{3}',{4},'{5}',{6},'{7}')", a, b, c, d, e, f, g, h);

{6}左右虽然我不确定会导致您获得的异常。告诉我们发生异常的地方会有很大帮助。

答案 3 :(得分:0)

解决了它。这是另一页上的问题。

感谢大家的评论。 :)