' System.IndexOutOfRangeException'关于数据库提交

时间:2016-10-05 17:51:35

标签: c# sql asp.net

我有一张表格供人们加入候补名单。除最后一个参数外,所有表单信息都已正确提交。它不断抛出这个异常

' comm.Parameters [" @ DAYOFWEEK"]'抛出类型&System; .IndexOutOfRangeException'

的例外情况

来自RadioButtonList的输入。 我能找到的关于这个主题的所有其他线程似乎都是轻微的语法错误,但在最后一天盯着这个后我看不到任何错误。但我可能需要更有经验的眼睛。或者是我在字符串中收集radiobuttonlist值的问题?

protected void submitButton_Click(object sender, EventArgs e)
        {
            if(Page.IsValid)
            {

                string dayWeek = dayofweek.SelectedValue;

                SqlConnection conn;
                SqlCommand comm;
                string connectionString = ConfigurationManager.ConnectionStrings["HutWaitList"].ConnectionString;
                conn = new SqlConnection(connectionString);
                comm = new SqlCommand("INSERT INTO waitList (FirstName, LastName, Email, StartDate, EndDate, Spaces, DayofWeek) Values(@FirstName, @LastName, @Email, @StartDate, @EndDate, @Spaces, @DayofWeek)",conn); 
                comm.Parameters.Add("@FirstName", System.Data.SqlDbType.NVarChar, 50);
            comm.Parameters["@FirstName"].Value = firstname.Text;
                comm.Parameters.Add("@LastName", System.Data.SqlDbType.NVarChar, 50);
            comm.Parameters["@LastName"].Value = lastname.Text;
                comm.Parameters.Add("@Email", System.Data.SqlDbType.NVarChar, 50);
            comm.Parameters["@Email"].Value = email.Text;
                comm.Parameters.Add("@StartDate", System.Data.SqlDbType.Date);
            comm.Parameters["@StartDate"].Value = DateTime.Parse(startdate.Text).Date;
                comm.Parameters.Add("@EndDate", System.Data.SqlDbType.Date);
            comm.Parameters["@EndDate"].Value = DateTime.Parse(enddate.Text).Date;

                comm.Parameters.Add("@Spaces", System.Data.SqlDbType.NVarChar, 50);
            comm.Parameters["@Spaces"].Value = numspaces.Text;
                comm.Parameters.Add("@DayofWeek", System.Data.SqlDbType.NVarChar, 50);
            comm.Parameters["@DayofWeek"].Value = dayWeek;



                try
            {
                conn.Open();

                comm.ExecuteNonQuery();
            }
            catch
            {
                dbErrorMessage.Text = "There was an error submitting your waitlist information.";
            }
            finally
            {
                conn.Close();
            }
           }
        }

3 个答案:

答案 0 :(得分:0)

为什么不一次性添加它?

cmd.Parameters.AddWithValue(“@ months”,nMonths);

只要传入的类型与数据库中的类型兼容,就不需要指定类型。这也将简化维护。每次更改表定义时都不必更改代码。

答案 1 :(得分:0)

我想这是一个答案,因为我有这个工作。最后,我们尝试了重建解决方案'它解决了这个问题和另一个我一直想弄清楚的问题。我是ASP.net的新手并且大部分是自学成才,所以我甚至没有意识到这可能是一个选项或可能的解决方案,直到我开始注意到Debugger移动我的断点并且尽可能地列出了重建解决方案解决这个问题。

答案 2 :(得分:-1)

通过在1行上执行所有操作,效率更高,可能会解决您的问题:

comm.Parameters.Add("@DayofWeek", System.Data.SqlDbType.NVarChar, 50).Value = dayWeek;

您可以对所有参数执行此操作,并在每次添加后保存查找。