在用cmdInsert.ExecuteNonQuery();向access数据库中添加数据时,出现如下错误:System.FormatException: 索引(从零开始)必须大于或等于零,且小于参数列表的大小。
源错误: 
行 28:  cmdInsert.Parameters.Add("@favor",txtFavor.Text);
行 29:  conPubs.Open();
行 30:  cmdInsert.ExecuteNonQuery();     //红色的
行 31:  conPubs.Close();
行 32: }请问各位大哥大姐是为什么呀?

解决方案 »

  1.   

    cmdInsert.Parameters.Add("@favor",DbType.String).Value=txtFavor.Text;
      

  2.   

    yistudio(阳光灿烂的日子)说的有道理。
      

  3.   

    string strUpdate;
    strUpdate = "Insert into [User] values("; 
    strUpdate = strUpdate + "@userName,";
    strUpdate = strUpdate + "@passWord,";
    strUpdate = strUpdate + "@sex,";
    strUpdate = strUpdate + "@birthday,";
    strUpdate = strUpdate + "@cardId,";
    strUpdate = strUpdate + "@skill)";

    string strAccessConn = ConfigurationSettings.AppSettings["AccessConnection"]+this.Server.MapPath("PerInfo.mdb");
    OleDbConnection AccessCon=new OleDbConnection(strAccessConn);

    OleDbCommand comm = new OleDbCommand();
    comm.Connection   = AccessCon;
    comm.Connection.Open();
    comm.CommandType  = CommandType.Text;
    comm.CommandText  = strUpdate;

    OleDbParameter parameter;parameter = comm.Parameters.Add("@userName",OleDbType.Char,16);
    parameter.Value = Uid.Text.ToString();parameter = comm.Parameters.Add("@passWord",OleDbType.Char,16);
    parameter.Value = this.Pwd.Text; parameter = comm.Parameters.Add("@sex",OleDbType.Char,2);
    parameter.Value = this.Sex.SelectedValue.ToString();parameter = comm.Parameters.Add("@birthday",OleDbType.Char,16);
    parameter.Value = this.Birthday.Text.Trim()+" ";parameter = comm.Parameters.Add("@cardId",OleDbType.Char,32);
    parameter.Value = this.CardID.Text.Trim();

    parameter = comm.Parameters.Add("@skill",OleDbType.Char,255);
    parameter.Value = this.Skill.Text.Trim()+" ";comm.ExecuteNonQuery();

    comm.Connection.Close();
    comm.Dispose();
      

  4.   

    string strUpdate;
    strUpdate = "Insert into [User] values("; 
    strUpdate = strUpdate + "@userName,";
    strUpdate = strUpdate + "@passWord,";
    strUpdate = strUpdate + "@sex,";
    strUpdate = strUpdate + "@birthday,";
    strUpdate = strUpdate + "@cardId,";
    strUpdate = strUpdate + "@skill)";

    string strAccessConn = ConfigurationSettings.AppSettings["AccessConnection"]+this.Server.MapPath("PerInfo.mdb");
    OleDbConnection AccessCon=new OleDbConnection(strAccessConn);

    OleDbCommand comm = new OleDbCommand();
    comm.Connection   = AccessCon;
    comm.Connection.Open();
    comm.CommandType  = CommandType.Text;
    comm.CommandText  = strUpdate;

    OleDbParameter parameter;parameter = comm.Parameters.Add("@userName",OleDbType.Char,16);
    parameter.Value = Uid.Text.ToString();parameter = comm.Parameters.Add("@passWord",OleDbType.Char,16);
    parameter.Value = this.Pwd.Text; parameter = comm.Parameters.Add("@sex",OleDbType.Char,2);
    parameter.Value = this.Sex.SelectedValue.ToString();parameter = comm.Parameters.Add("@birthday",OleDbType.Char,16);
    parameter.Value = this.Birthday.Text.Trim()+" ";parameter = comm.Parameters.Add("@cardId",OleDbType.Char,32);
    parameter.Value = this.CardID.Text.Trim();

    parameter = comm.Parameters.Add("@skill",OleDbType.Char,255);
    parameter.Value = this.Skill.Text.Trim()+" ";comm.ExecuteNonQuery();

    comm.Connection.Close();
    comm.Dispose();
      

  5.   

    http://chs.gotdotnet.com/quickstart/util/srcview.aspx?path=/quickstart/aspplus/samples/webforms/data/datagrid5.src
      

  6.   

    cmdInsert.Parameters.Add("@favor",DbType.String).Value=txtFavor.Text;人家 yistudio(阳光灿烂的日子) 都已经说了哦~~
      

  7.   

    DbType指字段的数据类型,在System.Data命名空间下
      

  8.   

    cmdInsert.Parameters.Add("@class",DbType.String).Value=txtClass.Text;
    cmdInsert.Parameters.Add("@bedroom",DbType.String).Value=txtBedroom;
    cmdInsert.Parameters.Add("@phone",DbType.String).Value=txtPhone;
    这后面两行里难道少了。text
    其次也写出你的表结构看下
      

  9.   

    加上缺少的两个.text后又出现如下错误:
     System.Data.OleDb.OleDbException: 操作必须使用一个可更新的查询。
    还是cmdInsert.ExecuteNonQuery();出错
      

  10.   

    1.把DbType.String都换成System.Data.OleDb.OleDbType.VarChar
    2.把.Parameters.Add("@参数名",DbType.String).Value
    全改成:
    .Parameters.Add("@参数名",System.Data.OleDb.OleDbType.VarChar,<字段长度>).Value=<txtBox.Text>
    的形式
      

  11.   

    还是不行啊还是同样的错误:
    System.Data.OleDb.OleDbException: 操作必须使用一个可更新的查询。
      

  12.   

    没有说明SQL参数是什么类型的
      

  13.   

    原来其他的都不用改,只要把数据库文件换一个位置,我是换到E盘根目录下,然后把DleDbCommand里的数据库地址改为DATA Source=E:\\member.mdb,问题就解决了,不过这是为什么呢,为什么DATA Source=E:/web/hdtv/hdtv.mdb就不行呢?