2016-10-05 29 views
0

私は待機リストに自分自身を追加するためのフォームを持っています。最後のパラメータを除いて、すべてのフォーム情報が正しく送信されます。それがRadioButtonListのからの入力の 'System.IndexOutOfRangeException'データベース提出時に 'System.IndexOutOfRangeException'が発生しました

'comm.Parameters [ "@のDAYOFWEEKは、"]' タイプの例外をスローした

をこの例外をスローし続けます。 このトピックの他のスレッドはすべて、軽微な構文エラーであるように見えましたが、最終日にこれを見つめた後、私は何も見えません。しかし、私は経験豊富な目を必要とするかもしれません。または、文字列内の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(); 
      } 
      } 
     } 
+0

dayWeekの値がパラメータとして割り当てられているのを確認しましたか?おそらく後続の空白などで長さが長くなることがありますか?RadioButtonListから来るdayWeekの値を投稿できますか? – inan

+0

waitListテーブルにDayOfWeek列NVarChar 50ですか? –

+0

アドバイスをいただきありがとうございます。私はC#を初めて使っているので、まだ最良のフォーマット/プラクティスを手に入れていない。私は "AddWithValue"形式を使用してコードをクリーンアップし、同じ問題が発生します。私はテーブルをダブルチェックして、カラムに正しいタイプと名前が設定されています。もう1つの奇妙なことは、デバッガで関数をステップ実行すると、DayofWeekを使ってその行をスキップし、例外を取得するためにもう一度やり直す必要があることです。 – HiCntry

答えて

0

ワンショットで追加してみませんか?

cmd.Parameters.AddWithValue( "@ months"、nMonths);

渡すタイプがデータベースのタイプと互換性がある限り、タイプを指定する必要はありません。これによりメンテナンスも容易になります。テーブル定義を変更するたびにコードを変更する必要はありません。

-1

それは、より効率的になり、1本のライン上のすべてを行うことで、あなたの問題を解決することがあります

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

あなたはすべてのパラメータのためにこれを行うと、それぞれが追加した後、検索を保存することができます。

0

私はこれが働いて以来、これは答えと考えています。最後に「Rebuild Solution」を試してみましたが、この問題と私が把握しようとしていた問題が修正されました。私はASP.netの初心者であり、主に独学で、デバッガが私のブレークポイントを動かすことに気づき始めてから、ソリューションを再構築することはその可能性のある修正としてリストアップされました。

関連する問題