-7

私のコードの最初の部分は、配列リストに項目を追加します。

後で for ループを使用してそのコンテンツにアクセスしようとすると、arraylist がクリアされ、値が返されません。

*CODE/FLOW まず、どのイベントがプログラムの下にあるのか知りたいです。SEARCH ボタンをクリックし、データベースから読み取り、その結果を配列に配置します。

 while (dr.Read())
        {
            string eventID = Convert.ToString(dr["Event ID"]);
            programEvents.Add(eventID);
        }

すでにイベントが表示されているので、人物名を入力してイベントに登録します

for (int ctr = 0; ctr < spPeoplePicker.ResolvedEntities.Count; ctr++)
            {
                PickerEntity selectedEntity = (PickerEntity)spPeoplePicker.ResolvedEntities[ctr];
                //get the email of the person added
                //use this email as search tool for Peoplesoft database
                string entityEmail = Convert.ToString(selectedEntity.EntityData["Email"]);
                //string email = Convert.ToString(selectedEntity.EntityData["Title"]);
                //line below can get display name of entity
                PickerEntity pe = (PickerEntity)spPeoplePicker.ResolvedEntities[ctr];

                for (int evectr = 0; evectr <= programEvents.Count; evectr++)
                {

これが失敗する場所です。

                    paramID = programEvents[evectr];

                    #region getEventDetails
                    ProgramManagement.Conn connect = new ProgramManagement.Conn();
                    SqlConnection conn = new SqlConnection(@connect.getConnString());
                    conn.Open();
                    SqlCommand stmnt = conn.CreateCommand();
                    stmnt.CommandText = "SELECT * FROM [TrainingAndScheduling].[dbo].[trainersView]" +
                        " WHERE EventID='" + paramID + "'"; ;
                    SqlDataReader thisReader = stmnt.ExecuteReader();
                    if (thisReader.HasRows)
                    {
                        thisReader.Read();                            
                        eveName = Convert.ToString(thisReader["CourseName"]);
                        eveStart = Convert.ToString(thisReader["StartDate"]);
                        eveEnd = Convert.ToString(thisReader["EndDate"]);
                        eveVenue = Convert.ToString(thisReader["RoomID"]);
                    }
                    else
                    { }
                    thisReader.Close();
                    conn.Close();
                    #endregion

                    #region registration for a single event
                    ProgramManagement.Registration register = new ProgramManagement.Registration();
                    if (!register.register(entityEmail, paramID))
                    {
                        //this block is executed if user is not registered
                        errorAdding = errorAdding + "<br/>" + "Engineer: " +
                            pe.DisplayText + " was not registered.";
                    }
                    else
                    {
                        ProgramManagement.Email sendemail = new ProgramManagement.Email();
                        sendemail.sendNotification(entityEmail, pe.DisplayText, eveName, eveStart, eveEnd, eveVenue, paramID);
                    }
                    #endregion
                }


            }
4

1 に答える 1

1

ステートメントが失敗する理由は、コレクションの境界を超えて要素にアクセスしようとしているためです。を繰り返し処理するとき、からinclusiveまでの範囲のprogramEventsインデックスを割り当てています。ただし、インデックスはゼロから始まるため、最後の要素のインデックスは実際には; アクセスすると、.evectr0programEvents.Count programEvents.Count - 1programEvents[programEvents.Count]IndexOutOfRangeException

以下を置き換える必要があります。

for (int evectr = 0; evectr <= programEvents.Count; evectr++)
{
    paramID = programEvents[evectr];

…と:

for (int evectr = 0; evectr < programEvents.Count; evectr++)
{
    paramID = programEvents[evectr];
于 2012-06-15T05:49:54.063 に答える