title: Logic error when adding to a database
body: <p>In my program, the user has the ability to group students together into a class. In my code, there seems to be some weird logic error; my database links a group to the students with a <code>StudentsGroups</code> table. While an input should look like this:</p>
  
  <pre><code>+---------------------+----------------------------------+
  |      studentsgroups |                           groups |
  +---------+-----------+---------+-----------+------------+
  | groupID | studentID | groupID | groupName | groupFocus |
  +---------+-----------+---------+-----------+------------+
  |       1 |         1 |       1 | TestGroup |      Maths |
  |       1 |         2 +---------+-----------+------------+
  |       1 |         3 |
  +---------+-----------+
  </code></pre>
  
  <p>My output instead looks like this:</p>
  
  <pre><code>+---------+-----------+
  | groupID | studentID |
  +---------+-----------+
  |       1 |         0 |
  |       2 |         0 |
  |       3 |         0 |
  +---------+-----------+
  </code></pre>
  
  <p>With the <code>groups</code> table being empty. I am not getting any error messages from this, so as far as I know my code runs fine, but somewhere along the way there is an issue.</p>
  
  <pre><code>Private Sub btnSubmit_Click(sender As Object, e As EventArgs) Handles btnSubmit.Click
      ' We create a new instance of a Groups object to store our entered values; the group's name
      ' the group's focus and the students in this group
      Dim newGroup As New Groups
      newGroup.strGroupName = txtGroupName.Text
      newGroup.strGroupFocus = cmbGroupFocus.SelectedValue
      ' We add every student in this group list to the Groups object's student list.
      For i As Integer = 0 To lstGroupList.Items.Count - 1
          newGroup.addStudent(groupList.Item(i))
      Next
      ' Firstly, we must insert a new group into the database. This will allow us to link every
      ' student in the group to this group in our StudentsGroups table.
      Using conn As New MySqlConnection(connString)
          conn.Open()
          Using cmd As New MySqlCommand
              cmd.Connection = conn
              cmd.CommandText = "INSERT INTO groups(groupName, groupFocus) VALUES(@grpName, @grpFocus);"
              cmd.Parameters.AddWithValue("@grpName", newGroup.strGroupName)
              cmd.Parameters.AddWithValue("@grpFocus", newGroup.strGroupFocus)
          End Using
          conn.Close()
      End Using
      Try
          ' To get the ID of the group generated by the database, we make a temporary string to
          ' hold the ID value.
          Dim groupID As String
          Using conn As New MySqlConnection(connString)
              conn.Open()
              Using selComm As New MySqlCommand
                  ' We create a SELECT query to find the new ID by using the entered group's name.
                  selComm.Connection = conn
                  selComm.CommandText = "SELECT groupID FROM groups WHERE groupName = @groupName;"
                  selComm.Parameters.AddWithValue("@groupName", newGroup.strGroupName)
                  selComm.Prepare()
                  ' We use the ExecuteScalar method, which would return the very first entry on the
                  ' first row. Since we only want one row and one result, this is better than using
                  ' a DataTable and DataReader.
                  groupID = selComm.ExecuteScalar()
              End Using
              conn.Close()
          End Using
          ' Now we begin to link the students to their group. We run through every student in the
          ' group list and add in their ID along with the group's ID to the table.
          For i As Integer = 0 To groupList.Count - 1
              Using conn As New MySqlConnection(connString)
                  conn.Open()
                  Using newCommand As New MySqlCommand
                      newCommand.Connection = conn
                      newCommand.CommandText = "INSERT INTO studentsgroups VALUES(@groupID, @studentID);"
                      newCommand.Parameters.AddWithValue("@groupID", CInt(groupID))
                      ' To get the student's ID, we do the same process as above; make a new
                      ' command to get the student's ID, using ExecuteScalar.
                      Dim studentID As String
                      ' When processing a new command, we need a new connection item to 
                      Using conn2 As New MySqlConnection(connString)
                          conn2.Open()
                          Using comm2 As New MySqlCommand
                              comm2.Connection = conn2
                              comm2.CommandText = "SELECT idNumber FROM students WHERE passCode = @passcode"
                              comm2.Parameters.AddWithValue("@passcode", groupList.Item(i).intIDNum)
                              comm2.Prepare()
                              studentID = comm2.ExecuteScalar()
                          End Using
                          conn2.Close()
                      End Using
                      newCommand.Parameters.AddWithValue("@studentID", CInt(studentID))
                      newCommand.Prepare()
                      newCommand.ExecuteNonQuery()
                  End Using
                  conn.Close()
              End Using
          Next
      Catch ex As Exception
          MsgBox("Error: " &amp; ex.ToString())
      Finally
          MsgBox("New Group created!")
          Me.Close()
      End Try
  End Sub
  </code></pre>
  
  <p>Here is the relevant code for the submit section, would anyone know where the logic issue might be arising?</p>